我需要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 系统上执行的操作,我必须在其上实现(权限限制等)。
我认为你需要括号。
nohup $(tar -zcf archive.tar.gz.tmp mydir; mv archive.tar.gz.tmp archive.tar.gz) >/dev/null 2>&1 &
最简单的解决方案:创建一个 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 命令“使用此命令;将输出提供给另一个命令作为输入”)。
| 归档时间: |
|
| 查看次数: |
20717 次 |
| 最近记录: |