bash 스크립트를 만들었지만 실행하려고 하면 다음과 같은 메시지가 나타납니다.
#!/bin/bash no such file or directory
bash script.sh
작동시키려면 다음 명령을 실행해야 합니다 .
이 문제를 어떻게 해결할 수 있나요?
답변1
이러한 메시지는 일반적으로 첫 번째 줄 끝의 추가 캐리지 리턴이나 첫 번째 줄 시작 부분의 BOM 등 잘못된 shebang 줄로 인해 발생합니다.
달리기:
$ head -1 yourscript | od -c
그것이 어떻게 나타나는지보십시오.
이것은 잘못된 것입니다:
0000000 # ! / b i n / b a s h \r \n
이것도 잘못된 것입니다:
0000000 357 273 277 # ! / b i n / b a s h \n
이것은 정확합니다:
0000000 # ! / b i n / b a s h \n
이것이 문제인 경우 dos2unix
(또는 sed
, tr
, awk
, perl
... )를 사용하여 python
스크립트를 수정 하십시오.
BOM 및 테일 CR을 제거하는 방법은 다음과 같습니다.
sed -i '1s/^.*#//;s/\r$//' brokenScript
스크립트를 실행하는 데 사용된 셸은 표시되는 오류 메시지에 약간의 영향을 미칩니다.
다음 은 이름( echo $0
)과 다음 각 shebang 행으로만 표시되는 세 가지 스크립트입니다.
올바른 스크립트:
0000000 # ! / b i n / b a s h \n
스크립트와 Bom:
0000000 357 273 277 # ! / b i n / b a s h \n
CRLF를 사용한 스크립트:
0000000 # ! / b i n / b a s h \r \n
Bash에서 실행하면 다음 메시지가 표시됩니다.
$ ./correctScript
./correctScript
$ ./scriptWithCRLF
bash: ./scriptWithCRLF: /bin/bash^M: bad interpreter: No such file or directory
$ ./scriptWithBom
./scriptWithBom: line 1: #!/bin/bash: No such file or directory
./scriptWithBom
인터프리터를 명시적으로 호출하여 문제의 스크립트를 실행하면 CRLF 스크립트가 문제 없이 실행될 수 있습니다.
$ bash ./scriptWithCRLF
./scriptWithCRLF
$ bash ./scriptWithBom
./scriptWithBom: line 1: #!/bin/bash: No such file or directory
./scriptWithBom
이는 다음 조건에서 관찰되는 동작입니다 ksh
.
$ ./scriptWithCRLF
ksh: ./scriptWithCRLF: not found [No such file or directory]
$ ./scriptWithBom
./scriptWithBom[1]: #!/bin/bash: not found [No such file or directory]
./scriptWithBom
그리고 아래 dash
:
$ ./scriptWithCRLF
dash: 2: ./scriptWithCRLF: not found
$ ./scriptWithBom
./scriptWithBom: 1: ./scriptWithBom: #!/bin/bash: not found
./scriptWithBom
답변2
이는 UTF-8 스크립트의 BOM으로 인해 발생할 수도 있습니다. Windows에서 스크립트를 생성하는 경우 파일 시작 부분에 일부 정크가 표시되는 경우가 있습니다.
답변3
실제로 bash 스크립트의 올바른 shebang은 다음과 같습니다.
#!/usr/bin/env bash
freeBSD에서 bash는 다음 위치에 있기 때문입니다./usr/local/bin/bash
답변4
dos2unix가 없다면 이것이 이 문제를 해결하는 한 가지 방법입니다.
cp script _p4 && tr -d '\r' < _p4 > script && rm _p4