Linux

如何在 PROMPT_COMMAND 執行期間檢查 PIPESTATUS 等效項?

  • April 20, 2020

$PROMPT_COMMAND在 bash 中有一個自定義記錄最後執行的命令及其返回碼。我很$?高興地使用後者,直到我意識到對於管道命令這還不夠。我以為我會登錄${PIPESTATUS[@]}

不幸的是$PIPESTATUS,似乎是呼叫$PROMPT_COMMAND. 在執行期間我可以使用任何技巧來訪問此資訊$PROMPT_COMMAND嗎?

提示命令功能中的命令在提示命令後更改PIPESTATUSbash保存和恢復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而不是一個提示命令。

引用自:https://unix.stackexchange.com/questions/163613