Bash

“可變”與符號(背景過程)

  • January 9, 2019

我想知道是否有辦法將 & 符號放入變數中並仍然使用它將程序發送到後台。

這有效:

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}

設置FOREGROUNDtrue或為空以在後台執行程序。(設置FOREGROUNDtrue在後台執行無疑是令人困惑的!適當的變數名稱留給讀者練習。)

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