나는 왜“| makefile의 true”는“|| 진실"


13

파일을 제거하기 전에 서비스를 중지하는 makefile이 있습니다. 서비스를 중지 할 수 없으면 오류가 발생합니다. 이것은 분명히 원치 않는 것이므로 추가하고 || true싶지만을 놓쳤다 |. 그것을 만들기:

stop service foo | true
rm /etc/init/foo.conf

왜 이것이 작동하고 있으며 무슨 일이 일어나고 있는지 혼란 스럽습니다. 이것이 true키워드가 아니라 응용 프로그램 임을 의미합니까 ? 그들은 같은가요? 사용해야 할 좋은 이유가 | true있습니까?

답변:


16

true하고 false있습니다 로 coreutils는 (일반적 내장 인 쉘) 당신이 그 동작을 필요로하는 일이 상황에, 0이 아닌 0을 반환하는. 매뉴얼 페이지에서 :

참-아무 것도, 성공적으로
거짓-아무 것도, 실패

따라서 출력을에서 stop service foo로 파이핑하는 중입니다.이 출력은 true무시하고 0을 반환합니다. 기술적으로 작동하지만 || true의도 한 바를 분명히 사용해야 합니다. 출력을 사용하지 않는 프로그램으로 출력을 파이프 할 이유가 없습니다.


4
완벽하게 이해됩니다. :) 왜 " 읽지 못합니다." 나를 웃게한다.
Kit Sunde

9
피해야 할 또 다른 이유 | true는 명령이 파이프 버퍼를 채우는 데 충분한 출력을 생성 true하면 읽기를 기다리는 것을 차단 하기 때문입니다.
CJM

3
@cjm 또는 SIGPIPE로 인해 사망
Andy

6
@Kit :주의 foo || truefoo | true같은 일을하지 않습니다 foo || true출력을 보여줍니다 foo반면, foo | true모든 것을 버리고 것이다 foo(그리고 표준 출력에 쓰기를 foo함께 죽을 것 같다 SIGPIPE, 이미 표시 또는 블록).
Gilles 'SO- 악의를 멈춰라'

이 대답은 "아마도"라는 단어를 제외하고는 완벽합니다 ...!
Sam Watkins
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.