Ksh

在每次提示之前在目前 shell 中執行命令

  • July 8, 2016

我想jobs在我的終端標題中顯示目前狀態。在 Bash 中,我可以使用PROMPT_COMMAND它。Korn Shell (ksh93) 沒有。

其他答案建議在內部使用命令替換$PS1,這在一般情況下可以正常工作,但不適用於jobs命令。這裡的問題jobs是關注目前 shell的作業,但是命令替換(即PS1='...$(jobs)...')是在subshel​​l中執行的,因此沒有作業。

我知道的唯一機制是trap '... jobs ...' DEBUG,但這會執行得太頻繁。您是否知道如何在目前 shell 的上下文中執行命令,在每個提示符下執行一次,或者這在 Korn shell 中是不可能的?!

預設情況下,如果您只是設置PS1="....",那麼引號內的內容會在您設置它時進行評估。

但是,如果您將其附在裡面',那麼它會在顯示時進行評估。並且它不會導致$(jobs).

例如

$ PS1='
> $(jobs)
> $ '


$ sleep 1000 &
[1] 7541

[1] +  Running                 sleep 1000 &
$ sleep 1000 &
[2] 7543

[2] +  Running                 sleep 1000 &
[1] -  Running                 sleep 1000 &
$ kill %1
[1] - Terminated               sleep 1000 &

[2] +  Running                 sleep 1000 &
$ kill %2
[2] + Terminated               sleep 1000 &


$ 

(這個測試在 Debian Jessie 上使用 ksh93 完成,但應該適用於所有 ksh93 變體;我沒有任何 ksh88 可供測試。)

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