"command || true" 패턴이 왜 유용한가요?

"command || true" 패턴이 왜 유용한가요?

저는 현재 데비안 패키지를 탐색 중이며 몇 가지 코드 예제를 읽고 있습니다. 예를 들어 postinst스크립트의 각 줄은 패턴입니다.

some command || true
another command || true

따라서 일부 명령이 실패하면 해당 행은 true를 반환하지만 이것이 프로그램 출력에 어떤 영향을 미치는지는 알 수 없습니다.

답변1

이 패턴의 이유는 데비안 패키지의 유지 관리자 스크립트가 로 시작하는 경향이 있기 때문입니다 set -e. 이로 인해 모든 명령(엄격히 말하면 파이프, 목록 또는 복합 명령)이 0이 아닌 상태로 종료되는 즉시 셸이 종료됩니다. 이렇게 하면 오류가 누적되지 않습니다. 문제가 발생하자마자 스크립트가 중단됩니다.

스크립트의 명령이 실패할 수 있는 경우 추가 || true하면 생성된 복합 명령이 항상 상태 0으로 종료되므로 스크립트가 중단되지 않습니다. 예를 들어, 디렉토리를 삭제하는 것은 치명적인 오류가 아니어야 합니다(패키지가 삭제되는 것을 방지).

rmdir ... || true

rmdir오류를 무시하도록 지시하는 옵션이 없기 때문입니다 .

답변2

방금 실행한 프로그램의 출력에는 영향을 주지 않지만 호출자는 향후 논리에 영향을 주지 않고 모든 것이 정상적인 것처럼 계속할 수 있습니다.

바꿔 말하면 오류를 마스킹합니다.상태이전 명령의

michael@x071:[/usr/sbin]cat /tmp/false.sh
#!/bin/sh
false

michael@x071:[/usr/sbin]cat /tmp/true.sh 
#!/bin/sh
false || true

michael@x071:[/usr/sbin]sh /tmp/false.sh; echo $?
1
michael@x071:[/usr/sbin]sh /tmp/true.sh; echo $? 
0

관련 정보