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
). 당신은 찾을 수 있습니다여기bash
FreeBSD 설치 튜토리얼입니다. 제가 제공한 솔루션이 제대로 작동할 것입니다. 행운을 빌어요.
답변2
분명히 she-bang에서 스크립트는 bash
not에 의해 실행 되도록 의도되었습니다 sh
(비록 zsh
인용되지 않은 변수로 인해 구문이 구문과 더 비슷해 보이지만).
bash
이를 사용하거나 실행 해야 합니다 zsh
. 이러한 셸을 사용할 수 없는 경우 이를 설치하거나 sh
여기에서 간단한 구문 으로 스크립트를 변환할 수 있습니다 .
이 sh
언어(Bourne 또는 POSIX)에는 연산자가 없습니다 <(...)
. 에서 제공되며 ksh
지원됩니다. 비표준이며 특정 환경에서만 사용될 수도 있습니다.bash
zsh
echo -e
bash
ksh
표준에 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'