bash - 명령을 찾을 수 없습니다.

bash - 명령을 찾을 수 없습니다.

스크립트가 있습니다

[pic@pic Desktop]$ cat skrypt.sh 
#!/bin/bash

awk '{sub(/#echo "Wstałem"/,"#echo \"Wstałem\""); print $0 > "skrypt.sh"}' skrypt.sh
awk '{sub(/awk/,"#awk"); print $0 > "skrypt.sh"}' skrypt.sh

[pic@pic Desktop]$

스크립트를 실행합니다.

[pic@pic Desktop]$ ./skrypt.sh 
./skrypt.sh: line 5: h: command not found
[pic@pic Desktop]$ 

왜 메시지를 받았나요?

./skrypt.sh: line 5: h: command not found

편집하다:

스크립트를 실행한 후 결과를 얻고 싶습니다.

#!/bin/bash

#awk '{sub(/#echo "Wstałem"/,"#echo \"Wstałem\""); print $0 > "skrypt.sh"}' skrypt.sh
#awk '{sub(/awk/,"#awk"); print $0 > "skrypt.sh"}' skrypt.sh

이것은 단지 예일 뿐입니다. 아이디어는 실제 스크립트에서 위의 줄이 호출 후에 주석 처리된다는 것입니다.

답변1

매우 이상한 행동입니다. 그러나 그 뒤에는 논리가 있습니다.

bash스크립트를 한 줄씩 읽어보세요. 첫 번째 명령문은 대체할 내용이 없기 때문에 awk동일한 내용으로 새 파일을 작성합니다 .skrypt.sh

두 번째 문은 (단일 대체) 로 awk대체됩니다 . 그래서awk#awk다음에 추가캐릭터. 그런 다음 bash파일의 나머지 부분을 읽으십시오. 오프셋은 줄 끝(두 번째 awk명령문, 4줄)에 있습니다. 그런데 지금은 줄이 좀 길어졌습니다(한 글자). 따라서 bash는 단일 줄인 나머지 줄을 읽습니다 h. 이것은 명령으로 스레드됩니다(왜냐하면 우리는 bash스크립트에 있고 줄 바꿈으로 끝나기 때문입니다). 물론 은 h유효한 명령이 아니므로 오류 메시지가 나타납니다.

원하는 것을 달성하려면(스크립트가 매우 불안정한 경우를 제외하고) 명령으로 해석할 수 없는 문자( 예: 공백( )) 를 4행 끝에 추가하십시오 .

마지막으로 중요한 것은:

스크립트 내의 스크립트는 편집할 수 없습니다.

관련 정보