Expect Script – файл сценария bash не найден

Мой сценарий ожидания

#!/usr/bin/expect -f #I tried replacing sh - with bash -s still no positive results spawn ssh xxxx@yyyy "sh -" < test.sh expect "password: " send "zzzzz\r" expect "$ " 

Эта команда хорошо работает, если выполняется в терминале

 ssh xxxx@yyyy "sh -" < test.sh 

Но если я выполнил его через сценарий expect ; он не работает.

Это результат, если я выполняю его с помощью сценария ожидания. Могу ли я узнать, где я ошибаюсь

 bash: test.sh: No such file or directory 

PS: Да, файл существует, и учетные данные являются правильными.

Проблема заключается в том, что перенаправление с помощью < выполняется локально, когда вы запускаете ssh самостоятельно (с помощью оболочки, которую вы вводите), но выполняются на удаленной машине, когда вы запускаете ее из expect , потому что spawn просто копирует аргументы, которые вы предоставляете , поэтому < передается на удаленный доступ как часть команды ssh. Это как если бы вы набрали 'ssh' 'xxxx@yyyy' "sh -" '<' 'test.sh' в оболочку, которая аналогичным образом не будет работать.

Вам нужно добавить промежуточную команду оболочки, чтобы получить перенаправление, проанализированное до ssh. Используйте, например,

 spawn sh -c "ssh xxxx@yyyy sh - < test.sh"