Unix: s sh работает через командную строку, но не через скрипт - PullRequest
0 голосов
/ 13 июля 2020

Команда ниже работает через командную строку:

expect -c 'spawn ssh username@Host ; expect "assword:" ; send "<password>\r" ; interact;'

Ниже не работает, если я включаю в сценарий

while read server_from_file
do
    expect -c 'spawn ssh username@${server_from_file}; expect "assword:" ; send "<password>\r" ; interact;'
done < serverlist.conf

Пожалуйста, также дайте мне знать, как мы можем запускать определенные команды используя приведенный выше скрипт

1 Ответ

0 голосов
/ 13 июля 2020

expect наследует stdin из своей среды. В первом случае expect использует стандартный ввод сценария в качестве стандартного ввода. Во втором случае expect наследует stdin от включающего while l oop, поэтому он будет читать из файла. Типичным решением было бы использовать другой fd для l oop. например:

while read server_from_file <&3  
do
    expect -c 'spawn ssh username@${server_from_file}; expect "assword:" ; send "<password>\r" ; interact;'
done <3 serverlist.conf

(Обратите внимание, что некоторые оболочки предоставляют -u, и есть другие способы сделать это, но это должно указать вам в правильном направлении.)

...