nohup 多個連續指令

nohup 多個連續指令

我需要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 一樣運作。

相關內容