我需要nohup
一個接一個地執行兩個命令。第二個命令必須在第一個命令之後執行。以下是命令:
tar -zcf archive.tar.gz.tmp mydir
mv archive.tar.gz.tmp archive.tar.gz
我需要這些命令在後台運行,但顯然不能同時運行。第二個指令必須在第一個指令完成後執行。我試過這個:
nohup tar -zcf archive.tar.gz.tmp mydir ; mv archive.tar.gz.tmp archive.tar.gz > /dev/null 2>&1 &
但命令不在後台運行。 bash 提示符號會等到這兩個指令完成後才會給另一個提示符號。我需要它們在後台運行。
如果我做:
nohup tar -zcf archive.tar.gz.tmp mydir > /dev/null 2>&1 &
這完美地在後台運行。只有當我嘗試執行多個命令時才會出現這種情況。
我也嘗試過:
nohup tar -zcf archive.tar.gz.tmp mydir > /dev/null 2>&1 & ; mv archive.tar.gz.tmp archive.tar.gz > /dev/null 2>&1 &
但這也不起作用。無效的語法或其他東西。我確信有一種方法可以做到這一點,但我只是不確定語法。
我能想到的唯一替代方法是將命令放入一個.sh
文件中並 nohup 該文件,但這不一定是我可以在 Linux 系統上執行的操作,我必須在其上實現此操作(權限限制等)。
答案1
最簡單的解決方案:建立一個 shell 腳本
#/bin/sh
tar -zcf archive.tar.gz.tmp mydir
mv archive.tar.gz.tmp archive.tar.gz
並使用nohup myscript
.腳本中可能有一些額外的文件。
(是的,我很喜歡記錄。尤其是在與多人合作時,或者當你有一天可能離開工作而你的繼任者需要找出原因時」。)
另一種方法可能是為子任務啟動一個新的 shell(在本例中是 tar 並移動)
nohup `$(tar -zcf archive.tar.gz.tmp mydir; mv archive.tar.gz.tmp archive.tar.gz)
替代方案 2:
nohup ```tar -zcf archive.tar.gz.tmp mydir ; mv archive.tar.gz.tmp archive.tar.gz```。
不過我真的比較喜歡這個劇本。當您或其他人幾年後查看腳本並想知道為什麼這樣做時,其中的註釋可能非常有用。
一個不相關的註解:我到底如何發布帶有反引號的 anser? (shell 命令「使用此命令;將輸出提供給另一個命令作為輸入」)。
答案2
我認為你需要括號。
nohup $(tar -zcf archive.tar.gz.tmp mydir; mv archive.tar.gz.tmp archive.tar.gz) >/dev/null 2>&1 &
答案3
也許是bash包裝?
nohup bash -c 'tar -zcf archive.tar.gz.tmp mydir > /dev/null 2>&1 ; mv archive.tar.gz.tmp archive.tar.gz > /dev/null 2>&1' &
答案4
您可以使用screen
發出命令並從螢幕會話中分離:
screen
tar -zcf archive.tar.gz.tmp mydir && mv archive.tar.gz.tmp archive.tar.gz
ctrl-a d to detach
這些命令將像 nohup 一樣運作。