제가 그냥 쉘 상에서 echo djfladjflasdf > check
라는 명령을 하면 check가 존재한다면서 check화일안의 내용이 바뀌지 않는데요 C프로그램 안에서 똑같은 문장을 system함수 호출system(echo djfladjflasdf > check)로 실행하면 실행이 되서 check 화일 내용이 변하더라구요
어떤 shell을 사용하고 계신지요?
이른바 clobber 옵션(또는 환경변수) 때문입니다. bash에선 보통 지정을 안 해 놓고 사용하지만 csh, ksh, zsh 등에선 기본값으로 지정되어 있는 경우가 많습니다.
clobber(또는 CLOBBER)가 지정되어 있으면 리다이렉션 때 파일이 존재하더라도 오류 없이 그냥 덮어써 주지만, noclobber가 지정되어 있으면 이미 존재하는 파일을 보호하기 때문에 오류가 납니다.
csh, zsh 등에선 이 경우 > 대신 >!을 사용하고 bash는 >|을 사용하면 clobber 환경변수의 유무와 관계없이 무조건 덮어써 버립니다.
자세한 것은 man 페이지를 보세요.
냠냠...지금 사용하시고 있는 셸 환경에서 뭔가 셋팅을 해 놓은거 같습니
냠냠...지금 사용하시고 있는 셸 환경에서 뭔가 셋팅을 해 놓은거 같습니다만...냠냠...보통의 경우라면 echo 을 이용하면 물어 보지 않는게 정상입니다요.
현재 제 시스템에서도 파일이 존재한다고 하여도 물어 보지 않습니다.
어떤 shell을 사용하고 계신지요?이른바 clobber 옵션(또는
어떤 shell을 사용하고 계신지요?
이른바 clobber 옵션(또는 환경변수) 때문입니다. bash에선 보통 지정을 안 해 놓고 사용하지만 csh, ksh, zsh 등에선 기본값으로 지정되어 있는 경우가 많습니다.
clobber(또는 CLOBBER)가 지정되어 있으면 리다이렉션 때 파일이 존재하더라도 오류 없이 그냥 덮어써 주지만, noclobber가 지정되어 있으면 이미 존재하는 파일을 보호하기 때문에 오류가 납니다.
csh, zsh 등에선 이 경우 > 대신 >!을 사용하고 bash는 >|을 사용하면 clobber 환경변수의 유무와 관계없이 무조건 덮어써 버립니다.
자세한 것은 man 페이지를 보세요.
-----
http://monpetit.posterous.com/
http://monpetit.tistory.com/
ksh, bash 환경이라면 noclobber option이 설정된 것
ksh, bash 환경이라면 noclobber option이 설정된 것 같네요.
이 경우라면 "echo abcd >| filename" 과 같은 형태로 redirection을 사용하여야 합니다(파일이 이미 존재할 경우).
댓글 달기