web-dev-qa-db-ja.com

1行目でexpectスクリプトが失敗するのはなぜですか?

私のexpectスクリプトの最初の行が失敗します。これが私のスクリプトの内容全体ですが失敗します:

#!/usr/bin/expect -f

そしてそれはすぐに失敗します

": no such file or directory

私の応答として。 Expectは実際にインストールされ、/ usr/bin /にあり、これをルートから実行しています。 #記号の前にも余分なスペースや行はありません。もちろん、元々スクリプトにはそれ以上のものがありましたが、良いものに到達する前に失敗します。

14
Dennis Day

それを試してみました、そしてここに結果があります:/ usr/bin/expect ^ M:悪いインタプリタ

スクリプトを混乱させるWindows改行(「^ M」)がそこにある可能性はありますか? 「od」を試して、「expect」と「tofromdos」の後の改行文字、またはエディター(例:hexlモードのemacs)を削除してください。詳細については、manページを参照してください。

18
Bert F

行末が間違っています。 dos2unixまたはtr -d '\r'を介して押し込みます。

この問題が発生し、期待されるインタプリタがインストールされていないことがわかりました。奇妙なことに、シェルでコマンドを実行すると、機能しました。ただし、シェルスクリプトを使用すると、次のエラーが発生しました:/ usr/bin/expect:不正なインタプリタ:そのようなファイルまたはディレクトリはありません

Expectインタープリターをインストールするだけで修正しました。選択されたパッケージ名は次のとおりです。libtcl8.6を期待

ただ走れ:

Sudo apt-get install expect
9
G_Style

正直なところ、期待はよくわかりませんが、システムで実行すると「正常に機能」します。何も起こりませんが、それは私が期待することです。エラーメッセージが表示されません。マニュアルページによると、

#!/usr/bin/expect -f

スクリプトを開始する正しい方法です。次に、cmdfileとして実行しているスクリプトを丸呑みにします。

問題を再現する方法は、通常の改行ではなく、実際に行末に^ Mを配置することでした(Bert Fの応答を見て、試してみるように促しました)。 vimの:setlistコマンドは奇妙な文字を表示すると確信しています。

1