Bash
“可變”與符號(背景過程)
我想知道是否有辦法將 & 符號放入變數中並仍然使用它將程序發送到後台。
這有效:
BCKGRND=yes if [ "$BCKGRND" = "yes" ]; then sleep 5 & else sleep 5 fi
但是,只用一條來完成這五行不是很酷嗎?像這樣:
BCKGRND='&' sleep 5 ${BCKGRND}
但這不起作用。如果 BCKGRND 未設置,它可以工作 - 但是當它設置時,它會被解釋為文字’&‘並出錯。
不可能使用變數來後台呼叫,因為變數擴展發生在為控制運算符(例如
&&
和&
)解析命令行之後。另一種選擇是將呼叫包裝在一個函式中:
mayberunbg() { if [ "$BCKGRND" = "yes" ]; then "$@" & else "$@" fi }
…然後根據需要設置變數:
$ BCKGRND=yes mayberunbg sleep 3 [1] 14137 $ [1]+ Done "$@" # or $ BCKGRND=yes $ mayberunbg sleep 3 [1] 14203 $ [1]+ Done "$@" $ BCKGRND=no mayberunbg sleep 3 # 3 seconds later $
你可以翻轉事物並改變“前景”:
FOREGROUND=fg sleep 5 & ${FOREGROUND}
設置
FOREGROUND
為true
或為空以在後台執行程序。(設置FOREGROUND
為true
在後台執行無疑是令人困惑的!適當的變數名稱留給讀者練習。)