#!/bin/bash - 해당 파일이나 디렉터리가 없습니다.

#!/bin/bash - 해당 파일이나 디렉터리가 없습니다.

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

관련 정보