컴퓨터활용/유닉스

멀쩡한 쉘이 실행이 안 되고 파일이 없다고 메시지가 나온다면..

멜번초이 2008. 6. 27. 15:33
반응형

간혹 unix 의 vi 사용에 익숙하지 않은 분 중에 쉘을 간단하게 만들고 나서 실행을 시켰더니 실행이 안 된다고 하시는 분이 있습니다.

[cbssvd01@e9812978:/users/e9812978/shl]
[cbssvd01@e9812978:/users/e9812978/shl]ls -al
총계 20
-rwxr-xr-x   1 e9812978 cbsdev          189  6월 27일 15:23 bmlog
drwxr-xr-x   4 e9812978 cbsdev         4096  6월 27일 15:23 ..
drwxr-xr-x   2 e9812978 cbsdev          256  6월 27일 15:23 .
[cbssvd01@e9812978:/users/e9812978/shl]
[cbssvd01@e9812978:/users/e9812978/shl]cat bmlog
#!/usr/bin/ksh
bm_test_log_file=${PFM_USR_LOG_DIR}/TPFMADM02_usr_`date +%Y%m%d`.log
echo "tail -f $bm_test_log_file | grep  $1 "
tail -f $bm_test_log_file | cut  -c 75-300  | grep $1

[cbssvd01@e9812978:/users/e9812978/shl]bmlog
ksh: bmlog:  찾을 수 없습니다.
[cbssvd01@e9812978:/users/e9812978/shl]./bmlog
ksh: ./bmlog:  찾을 수 없습니다.
[cbssvd01@e9812978:/users/e9812978/shl]

이런 경우를 처음 당하면 난감하겠죠. 분명히 파일이 있고 mode 도 실행권한이 있는데 정작 쉘을 실행 시키면 파일이 없다고 메시지가 나오니 말입니다. 

이것의 해답은 간단합니다. vi로 열어 보면 보통의 내용과 다른 뭔가를 발견하게 됩니다. 마치 어깨위에 달라붙은 귀신과 같이 라인 끝마다 ^M 이란 것이 붙어 있는 것이 보입니다.

#!/usr/bin/ksh^M
bm_test_log_file=${PFM_USR_LOG_DIR}/TPFMADM02_usr_`date +%Y%m%d`.log^M
echo "tail -f $bm_test_log_file | grep  $1 "^M
tail -f $bm_test_log_file | cut  -c 75-300  | grep $1^M
^M

결국 /usr/bin/ 디렉토리 밑에 ksh 라는 파일은 있으나 ksh^M  라는 이름의 파일은 없습니다. 그러니 파일이 없다는 말도 과히 틀린 말은 아니죠.  vi로 열어서 다음과 같이 ^M 문자를 모두 없애 버릴 수 있습니다.

#!/usr/bin/ksh
bm_test_log_file=${PFM_USR_LOG_DIR}/TPFMADM02_usr_`date +%Y%m%d`.log^M
echo "tail -f $bm_test_log_file | grep  $1 "^M
tail -f $bm_test_log_file | cut  -c 75-300  | grep $1^M
^M
~
:%s/^M//g
 

여기서 vi의 커맨드에서 ^M 문자는 입력하기 곤란할 수 있는데 Ctrl키를 누른 상태에서 V를 누른 후 다시 M 을 누르면 입력이 가능합니다.

라인의 끝에 ^M 문자가 들어가게된 것은 작성한 text 파일을 ftp 로 전송할 때 binary 모드로 보낼 때 생기게 됩니다.  vi가 익숙하지 않다면 ascii 모드로 ftp 파일 전송을 다시 하면 끝에 달라 붙어 있는 ^M 문자가 떨어집니다.
 

반응형