구문 오류: "(" 예기치 않은(단어 필요) --- 내 bash 스크립트에 있음

구문 오류: "(" 예기치 않은(단어 필요) --- 내 bash 스크립트에 있음

Bash 스크립트가 있습니다.

#!/bin/bash

VAR1="var1"
VAR2="var2"
VAR3="var3"

cat ${VAR1} \
    <(echo -e '<something>') \                       # <--------- here's the error
    ${VAR2}/file123.txt \
    <(echo -e '</something>\n<something2>') \
    ${VAR3}/file456.txt \
    <(echo -e '</something2>')

실행하면 sh my_script.sh다음과 같은 오류가 발생합니다.

 my_script.sh: 9: Syntax error: "(" unexpected (expecting word)

고쳐 쓰다:

bash찾을 수 없습니다. "/bin/bash"가 존재하지 않습니다. 도 아니고 bash.

답변1

노력하다:

chmod 755 "my_script.sh"

그럼 그냥 이렇게 실행해 보세요

my_script.sh

첫 번째 줄은 #!/bin/bash스크립트를 실행하는 데 사용해야 하는 쉘을 시스템에 알려줍니다. . sh my_script.sh​명시적으로 작성할 수도 있습니다 /bin/bash my_script.sh. 또한 스크립트에 bash 관련 구문이 있는 경우 확장을 .bash더 명시적으로 변경하는 것을 고려해야 합니다.


편집하다

FreeBSD 배포판에는 없는 것 같습니다 bash(FreeBSD의 기본 셸은 인 것 같습니다 tcsh). 당신은 찾을 수 있습니다여기bashFreeBSD 설치 튜토리얼입니다. 제가 제공한 솔루션이 제대로 작동할 것입니다. 행운을 빌어요.

답변2

분명히 she-bang에서 스크립트는 bashnot에 의해 실행 되도록 의도되었습니다 sh(비록 zsh인용되지 않은 변수로 인해 구문이 구문과 더 비슷해 보이지만).

bash이를 사용하거나 실행 해야 합니다 zsh. 이러한 셸을 사용할 수 없는 경우 이를 설치하거나 sh여기에서 간단한 구문 으로 스크립트를 변환할 수 있습니다 .

sh언어(Bourne 또는 POSIX)에는 연산자가 없습니다 <(...). 에서 제공되며 ksh지원됩니다. 비표준이며 특정 환경에서만 사용될 수도 있습니다.bashzshecho -ebashksh

표준에 sh해당하는 것은 다음과 같습니다.

var1="var1"
var2="var2"
var3="var3"

cat < "$var1" || exit
printf '<something>\n' || exit
cat < "$var2/file123.txt" || exit
printf '</something>\n<something2>\n' || exit
cat < "$var3//file456.txt" || exit
print '</something2>\n'

관련 정보