쉘 스크립트가 동작을 안하는데 어떻게 해야 하나요?
db를 백업받고자 쉘 스크립트를 아래와 같이 만들어 실행 시키려고 하는데
: bad interpreter: 그런 파일이나 디렉토리가 없음 이라는
에러만 나옵니다.
혹시 해킹되었나 싶어 find /dev/ -type f로 확인해봐도 모두 정상인데
왜 위와 같은 메세지가 나오는지 알수 없군요.
아래는 디비 백업 스크립트입니다.
#!/bin/sh
#mysql 데이터백업
date=`date '+%y-%m-%d,%H-%M'`
/usr/local/mysql/bin/mysqldump -uuser -p1234 abcde > /home/bbbb/backup/
p$date.sql
또 아래는 /home/bbbb/backup 아래에있는 화일들입니다.
[root@xxx backup]# ls
autoftp.sh backup.sh delete.sh
[root@xxx backup]# ./backup.sh
: bad interpreter: 그런 파일이나 디렉토리가 없음
[root@xxx backup]#
분명히 디렉토리안에 backup.sh 화일이 잇는데 왜 그런 에러가 날가요?
그리고 /bin 디렉토리아래 sh 화일이 있는것도 확인했습니다.]
여기서 autoftp.sh 와 delete.sh는 동작을 잘 하는데 backup.sh 화일의
위에있는 #!/bin/sh 부분이 없습니다.
그런데 ./backup.sh 로 실행시키면 위와같은에러가 나는데
sh backup.sh로 실행시키면 실행은되는데 s05-10-31,06-32?.sql? 처럼 ?표가 붙어 나옵니다.
아시는분 도움좀 주세요.
#!/bin/bashset -x...위처럼 스크립트를 출력
#!/bin/bash
set -x
...
위처럼 스크립트를 출력해 가면서 디버그 해보세요.
set -x 를 .....
혹시 DOS모드?
혹시 쉘 파일이 도스 모드로 작성된게 아닌지 확인해 보시기 바랍니다.
즉 라인 끝이 0x0a 가 아니라 0x0d 0x0a 로 끝나는 경우.
유닉스를 싫어하는 어떤 동료직원이 윈도우에서 울트라에디트로
쉘을 작성 후 FTP 로 올려서 작업하는 경우
이런 현상이 있던 걸 기억합니다.
답변 감사합니다. 역시 그렇군요.
답변감사합니다.
제가 윈도우에서 만들어 ftp로 올렸더니 않된것 같군요.
직접 리눅스에 들어가 vi편집기로 작성하니 잘 되는군요.
정말 답변 감사합니다.
살며 그리고 사랑하며...
정보는 공유할때 그 가치가 있는것.....
나의 조그만 지식공유는 남에게 엄청난 기쁨을 안겨 준다.
vi 에디터로 해결하는 방법
ex mode 에서
set fileformat=unix
wq
하시면 됩니다.
file 명령으로 해당 파일이 어떤 파일인지 검사해보시면 알 수 있습니다. 위의 파일 그러니까 DOS/WINDOW 모드에서 작성된 파일은
$ file sdjfljksdklfsdklfjl
하시면
sdjfljksdklfsdklfjl: ASCII English tetxt, with CRLF line terminators
라고 뜨고, 유닉스의 보통파일은
sdjfljksdklfsdklfjl: ASCII English tetxt
이렇게 뜹니다.
댓글 달기