nohup 多个顺序命令

Jak*_*son 8 linux nohup

我需要nohup两个命令,一个接一个。第二个命令必须在第一个命令之后执行。以下是命令:

tar -zcf archive.tar.gz.tmp mydir
mv archive.tar.gz.tmp archive.tar.gz
Run Code Online (Sandbox Code Playgroud)

我需要命令在后台运行,但显然不能同时运行。第二个命令必须在第一个命令完成后运行。我试过这个:

nohup tar -zcf archive.tar.gz.tmp mydir ; mv archive.tar.gz.tmp archive.tar.gz > /dev/null 2>&1 &
Run Code Online (Sandbox Code Playgroud)

但命令不在后台运行。bash 提示符会等到这两个命令完成后再给我另一个提示符。我需要它们在后台运行。

如果我做:

nohup tar -zcf archive.tar.gz.tmp mydir > /dev/null 2>&1 &
Run Code Online (Sandbox Code Playgroud)

这完美地在后台运行。只有当我尝试执行多个命令时。

我也试过:

nohup tar -zcf archive.tar.gz.tmp mydir > /dev/null 2>&1 & ; mv archive.tar.gz.tmp archive.tar.gz > /dev/null 2>&1 &
Run Code Online (Sandbox Code Playgroud)

但这也不起作用。无效的语法什么的。我确定有一种方法可以做到这一点,但我不确定语法。

我能想到的唯一替代方法是将命令放入一个.sh文件中并 nohup 该文件,但这不一定是我可以在 linux 系统上执行的操作,我必须在其上实现(权限限制等)。

Aar*_*ley 5

我认为你需要括号。

nohup $(tar -zcf archive.tar.gz.tmp mydir; mv archive.tar.gz.tmp archive.tar.gz) >/dev/null 2>&1 &


Hen*_*nes 4

最简单的解决方案:创建一个 shell 脚本

 #/bin/sh
 tar -zcf archive.tar.gz.tmp mydir
 mv archive.tar.gz.tmp archive.tar.gz
Run Code Online (Sandbox Code Playgroud)

并使用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 命令“使用此命令;将输出提供给另一个命令作为输入”)。