스크립트가 있습니다
[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행 끝에 추가하십시오 .
마지막으로 중요한 것은:
스크립트 내의 스크립트는 편집할 수 없습니다.