/bin/true

/bin/true

Linux에서 아무 작업도 수행하지 않는 표준 가상 실행 파일이 있습니까? 매개변수를 수동으로 입력하기 위해 빌드 프로세스 전에 항상 $EDITOR를 여는 쉘 명령이 있습니다. 내 경우에는 매개변수가 항상 설정되어 있으므로(자동화된 스크립트임) 전혀 필요하지 않지만 여전히 팝업이 나타나 사용자 입력을 기다립니다.

이 문제를 해결하기 위해 아무 작업도 수행하지 않는 빈 실행 파일을 만들었으므로 설정 EDITOR=dummy하고 빌드 스크립트가 이를 호출하면 종료되고 빌드 프로세스가 시작될 수 있습니다.

제 질문은 실행 시 아무 작업도 수행하지 않는 Linux의 기존 공식 문서, 즉 이 목적으로 사용할 수 있는 자리 표시자가 있습니까?입니다.

답변1

true표준 유틸리티 가 있고 false첫 번째 유틸리티는 아무것도 하지 않습니다.성공적인 실행을 나타내기 위해 종료 상태 0을 반환합니다., 두 번째 것은 아무것도 하지 않고 실패한 결과를 나타내는 0이 아닌 값을 반환합니다 (*) . 당신은 아마도 첫 번째 것을 원할 것입니다.

일부 텍스트(커밋 메시지 등)를 입력해야 하는 일부 시스템에서는 "편집된" 파일이 실제로 수정되었는지 확인하지만 true이 경우 실행만으로는 작동하지 않습니다. 반대로 touch작동할 수도 있습니다.매개변수로 얻은 모든 파일의 타임스탬프 업데이트.

그러나 편집기가 파일 이름 이외의 매개변수를 가져오면 touch해당 매개변수는 파일로 생성됩니다. 많은 편집기에서는 첫 번째 줄에 커서를 놓아 편집기를 호출할 수 있도록 하는 매개 변수를 지원합니다. (예를 들어, 그렇지 않은 것 같습니다.)+NNN$EDITOR +123 filename.txtlessgit


true예를 들어 를 사용해야 합니다 /bin/true. 첫째, 쉘이 포함된 경우 경로 없이 명령을 지정하면 쉘이 내장 구현을 사용할 수 있습니다. 그렇지 않은 경우 바이너리는 어쨌든 발견됩니다 PATH. 둘째, 모든 시스템에 가 있는 것은 아닙니다 /bin/true. 예를 들어 macOS에서는 /usr/bin/true.

(* 또는 다음과 같이GNU 매뉴얼 페이지에는 다음과 같은 내용이 나와 있습니다., false "아무 것도 하지 않음, 실패함". @8bittree 감사합니다. )

답변2

셸에서는 내장 을 사용할 수 있습니다 :. 실행 파일은 아니지만 셸 스크립트나 셸 스크립트에서 실행되는 모든 항목에서는 다음을 수행합니다.

$ help :
:: :
    Null command.
     
    No effect; the command does nothing.
     
    Exit Status:
    Always succeeds.

이는 while 문( )에 사용하는 것으로 가장 잘 알려져 있지만 while :; do break; done이 용도에만 국한되지는 않습니다. 이 작업을 여러 번 수행해야 하는 경우 별도의 프로세스를 시작하지 않는 것이 더 빠릅니다.

$ time for i in $(seq 1000); do :; done

real    0m0,007s
user    0m0,002s
sys     0m0,004s
$ time for i in $(seq 1000); do /bin/true; done

real    0m0,686s
user    0m0,462s
sys     0m0,217s

답변3

명령 사용에 대한 @ilkkachu의 제안이 true아마도 최선의 대답일 것입니다. 그러나 명령을 사용할 수도 있습니다

sleep 0

답변4

/bin/true

true어떤 작업도 성공적으로 수행되지 않았습니다.

false아무것도 안하려고 했는데 실패했습니다.

/bin/true이는 및 에서 구현됩니다 /bin/false.

하지만 때로는 아무것도 하지 않는 것이 좋을 때도 있기 때문에 내장 쉘도 있습니다 true. 때로는 아무것도 하지 않고 빠르게 실패하고 싶을 때가 있으므로 내장 쉘이 있습니다 false.

성공과 실패의 차이는 종료 상태입니다 $?. 이것은 0실패가 아니라 성공에 관한 것입니다. 종료 상태는 단순히 실패를 나타내는 데 사용되지만 무엇이 잘못되었는지 자세히 설명하는 1오류 코드일 수도 있습니다 .254

$ true
$ echo $?
0
$ false
$ echo $?
1
$ false
$ echo $?
1
$ echo $?
0

이전 항목이 성공했기 때문에 마지막 항목이 어떻게 echo반환되는지 확인하세요.0echo

&&종료 상태는 "and"( ) 및 "or"( ||) 와 같은 논리 연산자와 함께 사용됩니다 .

$ true && echo "success"
success
$ false && echo "failure"
$ true || echo "success"
$ false || echo "failure"
failure

이후에는 false && echo "failure"아무것도 true || echo "success"인쇄되지 않습니다.

관련 정보