2017-04-23 64 views
0

我試圖在後臺運行程序。有沒有辦法通過控制操作員可選。喜歡的東西:控制運算符作爲bash腳本中的可選參數

if some_condition 
    bg=& 
fi 

myprog $bg 

然而,我所看到的,是bash(正確)處理$bg作爲參數傳遞給myprog。我試圖在後臺運行myprog

有沒有辦法做到這一點?

+1

'eval myprog $ bg'? – Cyrus

+1

爲什麼不「如果some_condition;然後myprog&; fi」?否則,你可以使用eval。 – codeforester

+0

我打算建議'eval',但'eval'是'evil'。使用和if語句會更容易和更安全。 –

回答

1

如何:

if some_condition 
then 
    myprog & 
else 
    myprog 
fi 
+1

我已經這樣做了。但是,想知道是否有辦法在沒有條件檢查的情況下在一行中處理這個問題。 –

+0

如果您的意圖是隻指定'myprog',那麼我在下面添加了一個解決方案,但是,如果您只運行一次'myprog',那麼James的回答將更可取。 –

0

我同意詹姆斯·布朗的回答,但是,如果你只希望一次指定myprog,那麼也許你可以使用一個函數來確定它應該運行在後臺或沒有。但是,這並不意味着你會在最初編寫更多行,但如果你正在運行可能有很多的背景,你可以從中受益......

run_in_background=false 

run_cmd() { 
    echo "Running [email protected]" 
    if $run_in_background; then 
     "[email protected]" & 
    else 
     "[email protected]" 
    fi 
} 

if [[ "$1" == '--bg' ]]; then 
    run_in_background=true 
    shift 
fi 

run_cmd "[email protected]" 

然後你就可以像這樣運行:

./script.bash --bg sleep 1 

或者,如果你可以在腳本本身運行:

... (Continuing from inside the script above) 
run_cmd sleep 1 
run_cmd echo hello 
wait # Waits for background processes to finish 

然後你就可以決定是否在傳遞給run_cmd的命令將在前臺或backgro通過省略或使用--bg標誌。