배쉬 : "> |"는 무엇을 하는가?


148

나는이 글을 방금 보았다;

$ some-command >| /tmp/output.txt

수직 파이프는 표준 리디렉션에서 한 명령의 출력을 다른 파이프로 "파이핑"하는 데 사용됩니다 >|. 실제로이 >시나리오에서 와 동일하게 완전히 쓸모가 없습니까?



답변:


220

그것은 쓸모가 없습니다-그것은 일반 >리디렉션 연산자 의 특수한 형태입니다 (그리고 아마도 파이프와는 관련이 없습니다). bash대부분의 다른 최신 쉘에는 옵션 noclobber이있어 리디렉션이 이미 존재하는 파일을 덮어 쓰거나 파기하지 못하게합니다. 예를 들어, noclobbertrue이고 파일이 /tmp/output.txt이미 존재하면 실패합니다.

$ some-command > /tmp/output.txt

그러나 리디렉션 연산자 를 noclobber사용 하여 설정을 명시 적으로 무시할 수 있습니다 >|. 리디렉션 noclobber이 설정되어 있어도 리디렉션이 작동 합니다.

noclobber현재 환경에 설정되어 있는지 확인할 수 있습니다 set -o.

역사적으로, "noclobber"옵션과 바이 패스 기능은 모두 csh70 년대 후반에 나온 것입니다 . ksh그것을 복사했지만 (80 년대 초) >|대신에 사용 되었습니다 >!. POSIX는 ksh구문을 지정했습니다 (따라서 bash, 일부 시스템에서 sh로 사용되는 최신 애쉬 파생물을 포함한 모든 POSIX 셸이이를 지원함). Zsh는 두 구문을 모두 지원합니다. Bourne 쉘 변형에 추가 된 것으로 생각하지 않지만 잘못되었을 수 있습니다.


3
@sch - 당신의 역사 노트 재 (추가 정보를 주셔서 감사합니다, BTW) - FreeBSD의의 shnoclobber, 2002 년 5 월에 대한 이후
D_Bye
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.