프로그램 실행 후 리턴 값 인쇄


9

터미널에서 모든 프로그램을 실행 한 후 입력하지 않고 자동 인쇄 반환 값을 설정하는 방법이 궁금합니다 echo $?.

설정할 수있는 것입니까? 코드 블록에는 그 기능이 있습니다.

답변:


10

네, 두 가지 방법이 있습니다. 하나는에 설정 PROMPT_COMMAND하고 .bashrc, 다른 하나는 명령에 PS1대한 명령 대체를 설정 하는 것 echo $?입니다.

방법 1 :

bash 매뉴얼 페이지에서 :

PROMPT_COMMAND

      If set, the value is executed as a command prior to issuing each
      primary prompt.

이 변수를 무엇으로 설정하든 매번 프롬프트를 그리기 전에 실행됩니다. 데모:

$> PROMPT_COMMAND=" echo 'Last command exited with'  \$? 'code'  "
Last command exited with 0 code
$> ls /etc/passwd > /dev/null
Last command exited with 0 code
$> ls /etc/asdf > /dev/null
ls: cannot access /etc/asdf: No such file or directory
Last command exited with 2 code
$> 

의 사용에 유의하십시오 \$?. 영구적으로 변경하려면 저장하십시오.bashrc

방법 2

PS1프롬프트가 다음과 같이 설정 되었다고 가정 하십시오.

PS1='
user@ubuntu:$> '

이 프롬프트가 화면에서 다시 그려 질 때마다 (앞의 각 명령이 실행 된 후) 프로그램을 실행하려면 다음 command substitution $(. . .) 과 같이 프롬프트에서 사용 하고 설정해야합니다.

PS1=' [ $? ] 
user@ubuntu: $> '

데모:

$> PS1=' [ $? ]
> $>_ '
 [ 0 ]
$>_ ls /etc/passwd > /dev/null
 [ 0 ]
$>_ ls /etc/asdf > /dev/null                                                                                                      
ls: cannot access /etc/asdf: No such file or directory
 [ 2 ]
$>_ 

PS1을 두 줄로 나눕니다 . top은 have [ exitcode ]와 bottom $> <blank space>'입니다. 그렇기 때문에 두 번째 줄에 여러 줄 이 >있기 때문입니다 $> '(행복 >은 여러 줄 PS2명령을 요구하는 프롬프트입니다). 또는 다음과 같이 할 수 있습니다 ( $'...'구조를 확인하십시오).

  $> PS1=$'[ $? ] \n$> '                                                                                                  
[ 0 ] 
$> 

+1 실제로 작동합니다. 27k 평판을 가진 사람을 의심하지는 않지만 프롬프트는 "명령"이 아니므로 $를 사용합니까? 그것에 $를 얻지 못합니까? 내가 생각했던 것처럼 0으로 재설정하십시오-오류없이 에코를 실행하는 첫 번째 방법을 사용하더라도.
Joe

PS1사용자 입력을 받기 전에 인쇄되는 텍스트 일뿐입니다. 매개 변수 확장 및 명령 대체에 영향을 미치지 않으므로 $(...)예를 들어 무엇이든 넣을 수 $( pwd )있습니다. 예를 들어 노트북 배터리 전원을 보여주는 사용자 지정 스크립트와 함께 사용했습니다
Sergiy Kolodyazhnyy

@mchid 무슨 뜻인가요?
Sergiy Kolodyazhnyy

1
@mchid "마지막 명령을 실행하기 전에"마지막 명령 실행이 완료된 후.
kos

1
@mchid 프롬프트가 인쇄되기 전에 실행되므로 다음 명령을 입력하기 전에 실행됩니다.
muru

4

아치 위키 에서 선택한 방법 은 trap ERR입니다. trap신호가 수신 될 때 또는 다른 특정 이벤트에 대해 명령을 실행하기 위해 Bash에서 사용됩니다. ERR반환 값이 (정상적으로 종료 않은 경우, 반환 값은 당연히 0이 될 것입니다) 0이 아닌 - 오류와 함께 현재의 명령 줄 종료가 될 때마다 트랩 달렸다이다

예를 들어,

trap 'printf "\ncode %d\n\n" $?' ERR

그때:

$ echo foo
foo
$ false

code 1

$

(참고 : 후 어떤 메시지를 echo성공적으로 실행 명령 - I 명령을 입력하고 터미널이 아무것도하지 않을 때 그것은 무엇을 의미합니까? )

Arch Wiki 팁이 진행되어 메시지의 색상이 지정되어 눈에 띄는 노란색 메시지가 나타납니다.

EC() { echo -e '\e[1;33m'code $?'\e[m\n'; }
trap EC ERR

효과:

여기에 이미지 설명을 입력하십시오

실제로, 내가해야 할 일은 code명령에서 실패했음을 알기 위해 출력에서 노란색 을 주시 하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.