Bash 스크립트가 빈 줄로 "명령을 찾을 수 없음"을 인쇄함
을 사용하여 스크립트를 bash scriptname.sh데비안의 사령부에서, 나는 이해합니다.Command Not found그리고 대본의 결과.
스크립트는 작동하지만 항상 있습니다.Command Not Found각 빈 줄에 대해 화면에 인쇄된 문입니다.빈 줄마다 명령을 찾을 수 없습니다.
는 스립트실중다니입는의 ./var폴더를 누릅니다.
스크립트는 다음과 같습니다.
#!/bin/bash
echo Hello World
다음을 입력하여 실행합니다.
bash testscript.sh
왜 이런 일이 일어날까요?
첫 번째 줄은 다음과 같습니다.
#!/bin/bash
bash가 아닌 합니다./bin/bash
실행 시도:
dos2unix script.sh
줄 끝 등이 형식으로 줄 끝에서 \하여 이은선변것형다유즉.선, 단끝서 \r(CR)에서 변경됩니다.\r\n (CR+LF)\n (LF).
에 더 자세한 dos2unixcommand page (man 페지이)
파일이 DOS/Win 형식인지 확인하는 다른 방법:
cat scriptname.sh | sed 's/\r/<CR>/'
출력은 다음과 같습니다.
#!/bin/sh<CR>
<CR>
echo Hello World<CR>
<CR>
이렇게 가 " 게하전파출텍다력니됩가트스이일렇"로 됩니다.<CR> 각에대표해에 대해 됩니다.\r파일의 문자입니다.
사용할 수 있습니다.bash -x scriptname.sh그것을 추적하기 위해.
저도 비슷한 문제에 부딪혔습니다.문제는 권한인 것 같습니다.만약 당신이ls -l파일에 실행 비트가 켜져 있지 않을 수도 있습니다.이렇게 하면 스크립트를 실행할 수 없습니다.:)
@artooro가 논평에서 추가한 것처럼:
해당 문제를 해결하려면 실행
chmod +x testscript.sh
이것은 사소한 것일 수도 있고 OP의 질문과 관련이 없을 수도 있지만 스크립팅을 배울 때 처음에 종종 실수했습니다.
VAR_NAME = $(hostname)
echo "the hostname is ${VAR_NAME}"
그러면 'command not found(명령을 찾을 수 없음)' 응답이 생성됩니다.올바른 방법은 공간을 제거하는 것입니다.
VAR_NAME=$(hostname)
Windows용 Bash에서 잘못 실행하려고 했습니다.
run_me.sh
처음에 ./ 없이 동일한 오류가 발생했습니다.
Windows 배경이 있는 사용자의 경우 올바른 양식이 중복됩니다.
./run_me.sh
스크립트가 (상대적으로) 제대로 작동하면 정상적으로 실행됩니다.문제는 경로에 없거나 설치되지 않았거나 철자가 잘못되었거나 유사한 프로그램을 참조하는 파일의 한 줄일 수 있습니다.
한 가지 방법은 다음을 배치하는 것입니다.set -x스크립트의 맨 위에 있거나 실행할 수 있습니다.bash -x단순한 의대에 bash 실행하기 가 발생하기 무엇인지 알 수 있습니다.
문제의 원인이 빈 줄 때문이라면 실제로 어떤 것이 있는지 확인해 보는 것이 좋습니다.실행:
od -xcb testscript.sh
"한상는있캐" 같은 재미있는 하세요.CTRL-M(캐리지 리턴) Windows 유형 편집기를 사용하여 얻을 수 있습니다.
사용하다dos2unix스크립트 파일에 있습니다.
실행을 위해 예를 들어 해당 경로의 전체 경로를 제공해야 합니다.
/home/Manuel/mywrittenscript
ㅠㅠchmod u+x testscript.sh
저는 여기서 그것을 알고 있습니다: http://www.linuxquestions.org/questions/red-hat-31/running-shell-script-command-not-found-202062/ .
메모장++을 사용하는 경우 .sh 오류 메시지 "command not found" 또는 autoconf 오류 메시지 "line 615: ../../autoconf/bin/autom4te:해당 파일 또는 디렉터리가 없습니다."
메모장에서 편집 -> EOL 변환으로 이동한 후 Macintos(CR)를 선택합니다.파일을 편집합니다.또한 곧 이러한 오류가 발생할 것이므로 이 명령으로 모든 파일을 확인하는 것이 좋습니다.
같은 문제가 있었습니다.불행하게도
dos2unix winfile.sh
bash: dos2unix: command not found
그래서 저는 개종하기 위해 이것을 했습니다.
awk '{ sub("\r$", ""); print }' winfile.sh > unixfile.sh
그리고 나서.
bash unixfile.sh
스크립트 실행과 관련된 문제는 줄 바꿈 "\" 뒤에 공백 문자가 있는 경우와 같이 다중 줄 명령의 잘못된 형식 지정과 연결될 수 있습니다.
./run_me.sh \
--with-some parameter
(\" 뒤에 추가 공간이 있으면 문제가 발생하지만 해당 공간을 제거하면 완벽하게 실행됩니다.
다음과 같은 실수로 'PATH' 변수를 재정의하지 않았는지 확인합니다.
#!/bin/bash
PATH="/home/user/Pictures/"; # do NOT do this
이건 제 실수였어요.
저는 또한 약간의 술을 마시고 있었습니다.Cannot execute command정확해 , 공간을 . 물론 육안으로는 발견할 수 없는 내 명령 바로 앞에서:
if [[ "true" ]]; then
highlight --syntax js "var i = 0;"
fi
빔의 모습은 다음과 같습니다.
if [[ "true" ]]; then
highlight --syntax js "var i = 0;"
fi
검사기를 에만 Bash 크스를실행한에후shellcheck제가 문제를 찾았나요?
오늘 우연히 달러 명령 프롬프트를 깜빡하고 복사했습니다.$(명령 문자열 앞에) 스크립트로 이동합니다.
현재 디렉터리( . )를 PATH에 추가하여 현재 디렉터리에 있는 스크립트를 이름만 입력하면 실행할 수 있습니다.
PATH=.:$PATH
입력하는 명령을 인식하기 위해 .bashrc 및 .bash_profile 파일을 별칭으로 업데이트할 수 있습니다.
.bashrc 및 .bash_profile 파일은 프로그램 파일을 저장하는 C: 드라이브에 있는 숨겨진 파일입니다.
언급URL : https://stackoverflow.com/questions/7362504/bash-script-prints-command-not-found-on-empty-lines
'programing' 카테고리의 다른 글
| 바이트[] 배열을 C#의 파일에 쓸 수 있습니까? (0) | 2023.05.26 |
|---|---|
| WPF 데이터를 인터페이스에 바인딩하고 실제 객체가 아님 - 캐스팅이 가능합니까? (0) | 2023.05.26 |
| Git 기록에서 중요한 파일 및 해당 커밋 제거 (0) | 2023.05.21 |
| 서로 다른 값 유형 간의 0으로 나누기 동작 불일치 (0) | 2023.05.21 |
| Mongoose: 유효성 검사 오류 경로가 필요합니다. (0) | 2023.05.21 |