액세스 || 반대편의 표준 오류인가요?

액세스 || 반대편의 표준 오류인가요?

나는 비슷한 것을 하고 싶다:

command || log $error_from_last_command

파이프처럼 사용 ||하면서도 계속 액세스할 수 있는 방법이 있나요?stderr

command내 의도는 의 오류 메시지를 처리하는 것이지만 log, 실패하는 경우에만 해당됩니다 command. 표시된 사본을 읽고 있지만 내 사례에 어떻게 적용해야 할지 모르겠습니다.

답변1

첫 번째 명령이 완료된 후에만 실행되는 다른 프로그램에서 프로그램의 출력을 사용하려는 경우 출력을 파일에 저장하는 것이 아마도 가장 쉬운 방법일 것입니다.

errfile=$(mktemp)
if ! somecommand 2> "$errfile" ; then
    log < "$errfile"    # or  log "$(cat "$errfile")" ?
fi
rm "$errfile"

출력을 파이프하려면 명령을 동시에 실행해야 하지만 첫 번째 명령이 완료될 때만 종료 코드를 얻습니다.

log < "$errfile"물론 위의 내용은 오류 메시지를 표준 입력으로 전달합니다 log(파이프를 사용하는 것과 마찬가지로). 명령줄 인수로 전달하려면 log "$(cat "$errfile")"(하나의 인수) 또는 log $(cat "$errfile")(분사 사용, log여러 인수 참조) 또는 log "$(< "$errfile")"(비표준, 최소한 Bash에서 작동함)을 사용하십시오.

답변2

다음 사항을 아는 것만으로도 귀하의 목적에 충분하다면종료 코드bash파이프의 첫 번째 요소(또는 파이프의 모든 요소)에서 이 변수 를 사용할 수 있습니다 . 매뉴얼 페이지 PIPESTATUS에 따르면 이 변수는 bash"배열 변수... 프로세스의 종료 상태 값 목록을 포함합니다. 가장 최근에 실행된 프런트엔드 파이프라인...".

기술적으로는 약간 다른 것을 요구하고 있다는 것을 알고 있지만 이 변수를 사용하면 처음에 예상하지 못한 방식으로 요구 사항을 충족할 수 있는지 고려해 볼 수 있습니다.

관련 정보