我需要一个接一个地发出两个命令.第二个命令必须在第一个命令之后执行.以下是命令:
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系统上可以做的事情我必须实现这个(特权限制等).
解决方法
最简单的解决方案:使用创建shell脚本
#/bin/sh tar -zcf archive.tar.gz.tmp mydir mv archive.tar.gz.tmp archive.tar.gz
并使用nohup myscript.可能还有一些脚本中的额外文档.
(是的,我是文档的傻瓜.特别是当与多个人合作或者有一天你可能会离职时,你的继任者需要找出原因“.)
另一种方法是为子任务启动一个新的shell(在这种情况下你的tar和move)
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命令’使用此命令;将输出作为输入提供给另一个命令’).