如何使用nohup执行多个命令


41

我需要使用执行多个命令nohup。每个命令应在上一个命令之后执行。

我以以下命令为例:

nohup wget $url && wget $url2 > /dev/null 2>&1 &

但是,该命令不起作用。

我应该为此使用什么命令?

Answers:


55

包装在sh -c

nohup sh -c 'wget "$0" && wget "$1"' "$url1" "$url2" > /dev/null &

1
当我启动nohup时,我得到“ nohup:忽略输入并将stderr重定向到stdout”,所以“ 2>&1”不是多余的吗?
harschware

1
大概。我想当我写下答案时,我只是从问题中复制了它。
jw013

6

在没有任何nohup的情况下,在单独的shell文件(例如command.sh)中创建命令列表会容易得多。

然后您致电:

nohup bash command.sh

4

其他人已经回答了nohup。作为一个实用的补充说明:我建议在screentmux会话中执行此类操作。这样,您可以断开连接,然后稍后重新连接,然后查看输出和最终结果。


1
这个答案对于交互式场景非常有用,但是对于脚本或自动化而言却没有任何意义。
乔纳森·哈特利

0

这样会更简单:

nohup sh -c "wget $url && wget $url2" > /dev/null 2>&1 &

但是,如果URL包含特殊字符,则可能会导致问题,因此,为了使用更安全的选项,可以使用:

nohup sh -c "wget \"$url\" && wget \"$url2\"" > /dev/null 2>&1 &

3
将参数传递到唯一安全的方法sh -c是通过单独的参数,这些参数可以通过位置参数被访问($0$1,...)。没有简单的方法可以为字符串解析正确地引用参数。如果$url本身包含双引号,则您尝试使用转义双引号的尝试将失败。尝试a='problem"'; sh -c "echo \"$a\""一下,看看-因为sh -c尝试运行,您应该遇到语法错误echo "problem""
2012年

@ jw013出于兴趣,您的异议是否同样适用于-oh接受的答案。由你。大概不是。但我不明白为什么不!:-)
乔纳森·哈特利

1
@JonathanHartley我不确定我是否理解您的问题。如果你比较这答案,我的认真,你应该注意到的方式的不同$url$url2使用。
jw013 '16

@ jw013当然可以。我很傻。谢谢你让我直率。
乔纳森·哈特利
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.