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) 줄이 있습니다 bash. test-interactive.sh이는 기본적으로 *nix 시스템에서 끝나는 Windows의 편집기에서 이 스크립트를 개발했기 때문일 가능성이 높습니다 \r\n. \n따라서 스크립트가 실행되면 \r아래에 표시되는 추가 콘텐츠가 질식됩니다. 실행하기 전에 스크립트를 정리하세요

dos2unix test-interactive.sh

관련 정보