bashスクリプトを生成すると、スクリプトはエラーを返すと予想されます。なぜ? [コピー]

bashスクリプトを生成すると、スクリプトはエラーを返すと予想されます。なぜ? [コピー]

テスト中です。デフォルトのテンプレートが機能すると予想されます。いくつかの質問をして、入力をファイルに出力するデモbashスクリプトを作成しました。

.expファイルを直接実行したり、「expect FILENAME」を介して実行したり、autoexpectを使用しても、そのファイルが正しく解釈されなかったことを示す次のエラーが発生します(予想される.expファイル?)。 Bashスクリプトを機能させるにはどうすればよいですか?

  • WSL経由でUbuntuをOSとして使用し、CMDを使用してテストしています。 (bashの実行は、WSLと利用可能な汎用bashコマンドを使用することですので、これがうまくいくかどうかはわかりません。)

予想ファイル:

#!/usr/bin/expect -f

set timeout -1

spawn /bin/bash "./test-interactive.sh"
# expect "*"
expect "Please fill in each prompt."
send -- "a\r"
expect "*"
send -- "b\r"
expect "Please fill in each prompt."
# expect "*"
send -- "c\r"
expect "*"
send -- "d\r"
expect eof

Bashシェルファイル:

#!/bin/bash

_message="Please fill in each prompt."

echo $_message

read a
read b

echo $_message

echo -n "$ "
read x
echo -n "$ "
read y

echo ""
echo "Accepting following inputs"
echo $a
echo $b
echo $x
echo $y
echo ""

echo "a: $a b: $b x: $x y: $y" > output.txt

# read -p "Press enter to exit"

出力:

spawn /bin/bash ./test-interactive.sh
./test-interactive.sh: line 2: $'\r': command not found
./test-interactive.sh: line 4: $'\r': command not found
Please fill in each prompt.
a
b
./test-interactive.sh: line 6: $'\r': command not found
': not a valid identifierne 7: read: `a
': not a valid identifierne 8: read: `b
./test-interactive.sh: line 9: $'\r': command not found
Please fill in each prompt.
c
d
./test-interactive.sh: line 11: $'\r': command not found
': not a valid identifierne 13: read: `x
': not a valid identifierne 15: read: `y
./test-interactive.sh: line 16: $'\r': command not found

Accepting following inputs

ベストアンサー1

スクリプトにDOS(CRLF)行がありますbashtest-interactive.shこれは、デフォルトでは、* nixシステムで終わるWindowsのエディタでこのスクリプトを開発したためである可能性が高いです\r\n\nしたがって、スクリプトが実行されると、\r下に表示される追加のコンテンツが窒息します。実行する前にスクリプトをクリーンアップしてください

dos2unix test-interactive.sh

おすすめ記事