$PROMPT_COMMAND
bash에는 마지막으로 실행된 명령과 해당 반환 코드를 기록하는 사용자 정의 프로그램이 있습니다 . $?
파이프 명령으로는 충분하지 않다는 것을 깨달을 때까지 나는 후자를 행복하게 사용했습니다. 나는 ${PIPESTATUS[@]}
그것을 문서화해야겠다고 생각했습니다.
아쉽게도 $PIPESTATUS
이미 설정된 것 같습니다뒤쪽에부르다 $PROMPT_COMMAND
. 당신은 가지고 있습니까?장난실행 중에 이 정보에 액세스하는 데 사용할 수 있습니까 $PROMPT_COMMAND
?
답변1
명령 기능은 프롬프트 명령에서 변경되고 , PIPESTATUS
프롬프트 명령 후에 bash
저장 및 복원 (및) PIPESTATUS
됩니다. 참조$?
여기에 예상되는 동작에 대한 설명이 있습니다..
비결은 다음 위치에 저장 $PIPESTATUS[]
(및/또는 $?
) 하는 것입니다.첫 번째 진술함수의 값. 그 이후에는 원래 값을 덮어씁니다.
function myprompt() {
_pipestatus=( "${PIPESTATUS[@]}" )
echo "current: ${PIPESTATUS[@]}"
echo "cached : ${_pipestatus[@]}"
}
PROMPT_COMMAND=myprompt
그 다음에:
$ true | false | true
current: 0
cached : 0 1 0
설명하신 것과 비슷한 작업을 수행했지만 ERR
프롬프트 명령 대신 트랩 처리기 기능을 사용했습니다.
답변2
글쎄, 아마도 bash 버전에 따라 다를 수도 있습니다.
Bash 프로필 구성에서 다음과 같은 간단한 할당을 시도해 보겠습니다.
PROMPT_COMMAND="에코 상태=$?" 내보내기
bash 4.1.2는 잘 작동합니다. Bash 프롬프트에서 존재하지 않는 명령을 입력했습니다.
상태=127
bash 3.2.25는 항상 인쇄됩니다.
상태=0
명령줄에서 변수를 확인합니다.
에코 $PROMPT_COMMAND
작업자 호스트에서는 내 작업에 해당합니다. 다른 호스트에서는 그 값은 다음과 같습니다.
이력기록-a;이력기록-n;에코상태=$?
왜 이러한 명령이 있습니까? 그들이 문제의 원인인가요?