Bash 스크립트는 빈 줄에 "Command Not Found"를 인쇄합니다.


111

bash scriptname.sh데비안의 명령 줄에서 사용하여 스크립트를 실행할 때마다 스크립트 Command Not found결과를 얻습니다 .

스크립트는 작동하지만 항상 Command Not Found빈 줄마다 화면에 명령문이 인쇄됩니다. 각 빈 줄은 명령을 찾을 수 없습니다.

/var폴더 에서 스크립트를 실행하고 있습니다 .

다음은 스크립트입니다.

#!/bin/bash

echo Hello World

다음을 입력하여 실행합니다.

bash testscript.sh

왜 이런 일이 발생합니까?


진지하게, net은 그러한 불만으로 가득 차 있습니다. Shell은 매우 약하고 절름발이 통역사입니다. 여기저기서 거의 실패합니다. 스크립트의 모든 공백도 봐야합니다. 보이지 않는 줄 바꿈 문자로 인해 내 스크립트가 실패했습니다. 아마도 이것은 공백이 중요한 스크립팅 언어 일 것입니다!
Atul

1
bash -x scriptname.sh오류를 추적하는 데 사용 합니다. – 제 경우에는 Windows에서 VSCode 및 줄 끝이 "CRLF"인 sh 파일이었습니다. 오른쪽 하단의 VSCode에서 줄 종결자를 "CRLF"에서 "LF"로 변경할 수 있습니다. 이 파일을 업로드하고 bash scriptname.sh.
Kai Noack

이것은 확실히 stackoverflow.com/questions/39527571/… 의 중복 이지만 여기에있는 많은 답변은 다른 이유로 "명령을 찾을 수 없음"을 얻는 여러 다른 상황을 설명합니다. 빈 줄에 대한 문제가 아닌 경우 방문자는 모든 답변읽어 보는 것이 좋습니다 .
tripleee

답변:


161

첫 번째 줄은 다음과 같습니다.

#!/bin/bash

그렇지 않은 경우 bash에 대한 경로를 입력하십시오. /bin/bash


다음을 실행 해보십시오.

dos2unix script.sh

그러면 줄 끝 등이 Windows에서 유닉스 형식으로 변환됩니다. 즉,이 행 끝에서 \ R (CR)이 그들을 변경 스트립 \r\n (CR+LF)\n (LF).

dos2unix명령 에 대한 자세한 정보 (맨 페이지)


파일이 dos / Win 형식인지 확인하는 또 다른 방법 :

cat scriptname.sh | sed 's/\r/<CR>/'

출력은 다음과 같습니다.

#!/bin/sh<CR>
<CR>
echo Hello World<CR>
<CR>

그러면 파일의 <CR>\r문자에 대해 표시된 전체 파일 텍스트가 출력 됩니다 .


그가 직접 실행하고 있기 때문에 아마도 필요하지 않을 것입니다 bash scriptname.sh(물론 여전히 좋은 습관입니다).
paxdiablo

1
안녕하세요 #! / bin / bash는 내 스크립트의 첫 번째 줄입니다
David

1
@chown-Mac에서 동일한 문제가 발생했습니다. 이 게시물을 우연히 발견했습니다. OP에 도움이되었는지 확실하지 않습니다. 하지만 귀하의 솔루션이 저를 도왔습니다.
Prashant 2011 년

1
감사. 이것은 내가 직면 한 정확한 문제였습니다. 이 답변이 작동했습니다.
slayedbylucifer

5
운전 중에 프로그래밍 질문에 대한 답을 어떻게 쓸 수 있습니까?
Omar Tariq

61

bash -x scriptname.sh추적하는 데 사용할 수 있습니다 .


47

비슷한 문제가 발생했습니다. 문제는 권한 인 것 같습니다. 를 수행하면 ls -l파일에 실행 비트가 설정되어 있지 않을 수 있음을 식별 할 수 있습니다. 이렇게하면 스크립트가 실행되지 않습니다. :)

@artooro가 주석에 추가했듯이 :

이 문제를 해결하려면 실행 chmod +x testscript.sh


4
이 문제를 해결하려면 실행chmod +x testscript.sh
artooro

이것은 나를 위해 일한 대답이었습니다. 항상 허가가 없다는 말을 들었으므로 그것을 sudo '하고 명령을 찾을 수 없다는 말을 들었습니다. 권한을 확인하려고 생각하지 않았습니다.
DiamondDrake

1
감사합니다 Lypso345, 이것은 내가 가진 문제를 해결했습니다.
ammills01

chmod 777 testscript.sh FTW
GeneCode

16

이것은 사소하고 OP의 질문과 관련이 없을 수 있지만 스크립팅을 배울 때 처음에는 종종 실수했습니다.

VAR_NAME = $(hostname)
echo "the hostname is ${VAR_NAME}"  

그러면 '명령을 찾을 수 없음'응답이 생성됩니다. 올바른 방법은 공백을 제거하는 것입니다.

VAR_NAME=$(hostname)

11

스크립트가 작업을 (상대적으로) 잘 수행하면 정상적으로 실행되고있는 것입니다. 문제는 경로에 없거나 설치되지 않았거나 철자가 틀렸거나 유사한 프로그램을 참조하는 파일의 한 줄일 수 있습니다.

한 가지 방법은 set -x스크립트의 맨 위에 를 배치 하거나 bash -x대신 실행하는 bash것입니다. 그러면 실행하기 전에 행이 출력되며 일반적으로 문제의 원인을 확인하려면 오류 직전에 명령 출력을 살펴보면됩니다.

말했듯이 문제를 일으키는 빈 줄이 있다면 그 안에 무엇이 있는지 실제로 확인하고 싶을 것입니다. 운영:

od -xcb testscript.sh

CTRL-MWindows 유형 편집기를 사용하여 얻을 수 있는 (캐리지 리턴) 과 같은 "보이지 않는"재미있는 문자가 없는지 확인하십시오 .


'od'명령에 +1! 멋지다, 나는 그것에 대해 몰랐다! 감사!
chown

11

Windows 용 Bash에서 실행을 잘못 시도했습니다.

run_me.sh 

처음에 ./없이 동일한 오류가 발생했습니다.

Windows 배경이있는 사람들에게는 올바른 양식이 중복되어 보입니다.

./run_me.sh



6

실행하려면 예를 들어 전체 경로를 제공해야합니다.

/home/Manuel/mywrittenscript

사실, 쉘은 파일 확장자에 대해 전혀 신경 쓰지 않습니다. 이것이 별도의 답변으로 게시되는 것이 장점인지 확실하지 않습니다.
tripleee

창문에 리눅스 파일 시스템 반대로 .IN 물론 확장 말 안 파일의 content.I에 대한 이름과 말 아무것도의 일부로서 단순히 사용하는 내 경우에 제약.
Masood Moghini

6

Notepad ++가 있고 .sh 오류 메시지 : "command not found" 또는이 autoconf 오류 메시지 "line 615 : ../../autoconf/bin/autom4te : No such file or directory"가 표시되는 경우 .

메모장 ++에서 편집 -> EOL 변환으로 이동 한 다음 Macinthos (CR) 을 확인하십시오 . 그러면 파일이 편집됩니다. 곧 이러한 오류가 발생하므로이 명령으로 모든 파일을 확인하는 것이 좋습니다.


감사합니다. 제 경우에는 busybox linux distro에서 스크립트를 실행했습니다. 내 스크립트의 모든 빈 줄에 동일한 오류 "찾을 수 없음"이 있습니다. 또한 if / else 문에도 문제가있었습니다. Notepad ++에서 EOL을 Unix로 변경하여 수정했습니다.
GeneCode

4

같은 문제가있었습니다. 운수 나쁘게

dos2unix winfile.sh
bash: dos2unix: command not found

그래서 저는 이것을 변환했습니다.

 awk '{ sub("\r$", ""); print }' winfile.sh > unixfile.sh

그리고

bash unixfile.sh

2

스크립트 실행 문제는 여러 줄 명령의 잘못된 형식으로 연결될 수도 있습니다. 예를 들어 줄 바꿈 "\"뒤에 공백 문자가있는 경우. 예 :

./run_me.sh \ 
--with-some parameter

( "\"뒤의 추가 공백에 유의하십시오) 문제가 발생하지만 해당 공백을 제거하면 완벽하게 실행됩니다.


0

나는 또한 Cannot execute command. 모든 것이 정확 해 보였지만 실제로 나는 &nbsp;육안으로는 발견 할 수없는 내 명령 직전에 깨지지 않는 공간 이있었습니다.

if [[ "true" ]]; then
  &nbsp;highlight --syntax js "var i = 0;"
fi

Vim에서는 다음과 같이 보입니다.

if [[ "true" ]]; then
  highlight --syntax js "var i = 0;"
fi

Bash 스크립트 검사기를 실행 한 후에야 shellcheck문제를 발견했습니다.


shellcheck물론 도움을 받으려면 스크립트를 정확하게 복사하고 붙여 넣어야합니다. shellcheck.net
tripleee

0

나는 오늘 이것을 만났는데, 무심코 달러 명령 프롬프트 $(명령 문자열 앞)를 스크립트에 복사했습니다 .



-1

입력하는 명령을 인식하도록 별칭으로 .bashrc 및 .bash_profile 파일을 업데이트 할 수 있습니다.

.bashrc 및 .bash_profile 파일은 아마도 프로그램 파일을 저장하는 C : 드라이브에있는 숨겨진 파일입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.