변수 a 및 b에 대한 명령의 출력을 읽는 스크립트 작성. 이것은 스크립트
#!/bin/bash read a b < <(awk "/Application Server/ && !seen[$7]++{printf "%s ", $7}" /tmp/ServerState) echo "The value of a is $a" echo "The value of b is $b"
이며 구문 오류는 다음과 같습니다.
line 3: syntax error near unexpected token `<" line 3: `read a b < <(awk /Application Server/ && !seen[$7]++{echo "%s ", $7} /tmp/ServerState)"
하지만 콘솔에 동일한 명령을 입력하면 아무런 문제없이 작동합니다.
app@user:/tmp> read a b < <(awk "/Application Server/ && !seen[$7]++{printf "%s ", $7}" /tmp/ServerState) app@user:/tmp> echo $a FAILED app@user:/tmp> echo $b STARTED
이에 대한 모든 도움을 주셔서 감사합니다.
댓글
답변
sh
(대부분의 데비안 파생 시스템에서 dash
에 연결됨)는 프로세스 대체 . bash script.sh
로 호출을 시도합니다. ./script.sh에 의한 동일한 호출은 iv id = “31fc1b6989 인 sha-bang
로 실행됩니다. 스크립트의 “>
/bin/bash
댓글
- @MichaelDurrant 아, 이제 당신의 수정은 내가 말하려는 것과 반대되는 것을 의미합니다.
- @muru 나는 수정을 받아 들일 수 없습니다 ' 티 o
bash
. 정확히dash
를 의미합니다.file $(which sh)
출력/bin/sh: symbolic link to 'dash'
- Costas, 그 ' 의미. Michael Durrant가
dash
를bash
로 바꾸도록 수정했습니다. 수정 해 주셔서 감사합니다. - 명령 대체 (
$(echo foo)
)가 아니라 프로세스 대체 (<( echo foo )
)를 의미합니다. POSIX 사양의 일부입니다). - @chepner 맞습니다. 의견 감사합니다. 복구되었습니다.
Answer
스크립트를 sh file.sh로 호출하려고했는데 오류가 발생했습니다. . 그러나 ./file.sh 및 bash file.sh와 동일한 스크립트를 호출하면 작동하고 원하는 결과를 제공합니다.
답변
또한 스크립트 상단에 다음 줄을 간단히 추가 할 수 있습니다.
#!/bin/bash
터미널 / 콘솔에 스크립트를 bash 스크립트로 실행하도록 지시하며 프로세스 대체 “<( cmd )
“가 정상적으로 작동합니다.
댓글
- OP '의 스크립트에는 이미 해당 shebang이 있지만 OP는 실행 중입니다.
file.sh
또는./file.sh
대신sh file.sh
( 자신의 답변 )
$ ./script.sh
sh
' 명령 대체를 허용하지 않습니다.bash script.sh
로 호출 해보세요../script.sh
에 의한 동일한 호출은 스크립트에서 / bin / ** bash ** 인sha-bang
로 실행됩니다.