![ksh 스크립트에서 구문 오류를 확인하는 방법은 무엇입니까?](https://linux55.com/image/40342/ksh%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%EC%84%9C%20%EA%B5%AC%EB%AC%B8%20%EC%98%A4%EB%A5%98%EB%A5%BC%20%ED%99%95%EC%9D%B8%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
$ cat foo.sh
#!/bin/ksh
echo foo
ehco foo2
오류에 대해 경고하지 않습니다.
$ /bin/ksh -n foo.sh
$ echo $?
0
질문:"ksh -n"이 구문 오류에 대해 경고하도록 하려면 어떻게 해야 합니까?
답변1
이는 실제 ksh 구문의 구문 오류가 아니라 런타임에만 발견되는 잘못된 명령 이름의 구문 오류입니다. 실행하면 명령을 찾을 수 없다는 오류가 발생합니다.
추가하는 경우:
echo foo
ehco foo2
if [ 1 -lt 0 ]
then
echo 123
done
그런 다음 다음을 실행하십시오.
$ ksh -n foo.sh
foo.sh: syntax error at line 9: `done' unexpected
답변2
스크립트에 구문 오류가 있으면 stderr에서 볼 수 있습니다. ksh -n
옳은 일입니다. 한 가지 예:
$ cat script.ksh
touch tmpfile
for f in tmpfile # missing "do"
rm $f
done
$ ksh script.ksh
script.ksh: syntax error at line 3: `rm' unexpected
$ ls -l tmp*
-rw-rw-r-- 1 glennj glennj 0 Jul 22 06:54 tmpfile
$ rm tmpfile
$ ksh -n script.ksh
script.ksh: syntax error at line 3: `rm' unexpected
$ ls -l tmp*
ls: cannot access tmp*: No such file or directory
따라서 스크립트는 파싱되지만 실행되지는 않습니다. (파일이 생성되지 않습니다.)