Почему эта команда не принимает входные данные из файла, несмотря на перенаправление? - PullRequest
0 голосов
/ 22 ноября 2018

При выполнении VPN-клиент cisco anyconnect получает IP-адрес VPN, пароль и некоторые другие входные данные от терминала.Однако вместо того, чтобы вводить его каждый раз, я записал значения в файл и попытался перенаправить файл в команду клиента vpn.

/opt/cisco/anyconnect/bin/vpn < vpndetails.txt

Однако, похоже, команда игнорирует перенаправление файла ипо-прежнему запрашивает ввод.Как это возможно?Код читает из некоторого другого дескриптора файла (не 0) и все еще читает его из терминала?Возможно ли это?

Примечание. Я знаю, что хранить пароли в файле не рекомендуется, но сейчас мне все равно.

1 Ответ

0 голосов
/ 22 ноября 2018

На вопрос «Возможно ли» есть ответ «да».

Код для anyconnect vpn, вероятно, читает / dev / tty, как объяснено в комментариях Chepner ea. В качестве забавного упражнения попробуйте этосценарий:

#! /bin/sh 

read -p "STDIN> " a
read -p "TERMINAL> " b  < /dev/tty
read -p "STDIN> " c

echo "Read $a and $c from stdio and $b from the terminal"

и, например, ls / | bash this_script.sh.

Однако, если вы хотите использовать Cisco Autoconnect без паролей, вам следует изучить функцию обнаружения «Всегда включен с доверенной сетью» ипользовательские сертификаты.

Запись в /dev/tty в надежде, что он будет подхвачен скриптом, не работает:

ljm@verlaine[tmp]$ ls | bash test.sh &
[3] 10558
ljm@verlaine[tmp]$ echo 'plop' > /dev/tty
plop

[3]+  Stopped                 ls | bash test.sh
ljm@verlaine[tmp]$ fg
ls | bash test.sh
(a loose enter is given)
Read a_file and b_file from stdio and  from the terminal
...