Почему мой сценарий ожидания не работает в строке 1?

Самая первая строка моего ожидаемого сценария терпит неудачу. Вот все содержимое моего сценария, и он терпит неудачу:

#!/usr/bin/expect -f

И это терпит неудачу сразу же с

": no such file or directory

как мой ответ. На самом деле Expect установлен и находится в /usr/bin/, и я запускаю его из-под root. У меня тоже нет лишних пробелов или строк перед знаком #. Конечно, изначально в сценарии было что-то большее, но он терпит неудачу прежде, чем доходит до хороших вещей.


person Dennis Day    schedule 22.12.2010    source источник
comment
если вы удалите все, кроме строки shebang, все равно произойдет сбой с той же ошибкой?   -  person ennuikiller    schedule 22.12.2010
comment
Да. Я уменьшаю его до одной строки, и он терпит неудачу.   -  person Dennis Day    schedule 22.12.2010
comment
Я скопировал это с другого сервера, и другой сервер может безупречно выполнить этот скрипт. Оба работают под управлением Ubuntu Hardy.   -  person Dennis Day    schedule 22.12.2010


Ответы (5)


Попробовал и вот результат: /usr/bin/expect^M: плохой интерпретатор

Возможно ли, что там есть новая строка Windows («^M»), которая сбивает сценарий? Вы можете попробовать «od», чтобы увидеть, какой символ (символы) новой строки стоит после «expect» и «tofromdos», или редактор (например, emacs в шестнадцатеричном режиме), чтобы удалить его. См. справочные страницы для получения дополнительной информации.

person Bert F    schedule 22.12.2010
comment
Дин! Дин! Дин! У нас есть победитель. Несмотря на то, что я использовал nano для входа, он сохранил файл в режиме MSDOS. Начал заново, и это, казалось, решило проблему. - person Dennis Day; 22.12.2010

У меня была эта проблема, и я обнаружил, что у меня не установлен интерпретатор ожидания! Как ни странно, если вы запускали команду в оболочке, она работала. Однако через сценарий оболочки я получил сообщение об ошибке: /usr/bin/expect: плохой интерпретатор: нет такого файла или каталога.

Я исправил это, просто установив интерпретатор Expect. Было выбрано имя пакета: expect libtcl8.6

Просто беги:

sudo apt-get install expect
person G_Style    schedule 18.11.2016

У вас неправильное окончание строк. Протолкните его через dos2unix или tr -d '\r'.

person Ignacio Vazquez-Abrams    schedule 22.12.2010

Честно говоря, я не знаю, чего ожидать, но когда я запускаю это в своей системе, оно «работает» нормально. Ничего не происходит, но я этого и ожидал. Я не получаю сообщения об ошибке. Согласно справочной странице,

#!/usr/bin/expect -f

это правильный способ запуска вашего скрипта. Затем Expect поглощает скрипт, который вы выполняете, как cmdfile.

Способ, которым я воспроизвел проблему, заключался в том, чтобы фактически поставить ^M в конце строки вместо обычной новой строки (увидел ответ Берта Ф., и это побудило меня попробовать). Я уверен, что команда vim :set list покажет любые странные символы.

person Glenn McAllister    schedule 22.12.2010

Если вы наблюдаете ошибку, это был символ новой строки Windows, который добавлен, потому что он скопирован с компьютера Windows через почту или winscp. Поэтому, чтобы избежать этой ошибки, скопируйте скрипт с помощью scp linux в linux и выполните скрипт. Это сработало для меня. спасибо

person TRG    schedule 01.12.2020