如何完全隐藏nohup消息?

时间:2014-12-23 16:35:51

标签: bash

我尝试完全隐藏来自终端的nohup消息。我的nohup用法如下:

if eval 'nohup grep "'$arg1' '$arg2' [A-Za-z]\+" /tmp/dict.txt >& /dev/null &'; then

但是在控制台中我用波兰语收到一条nohup消息:

nohup: zignorowanie wejścia i przekierowanie standardowego błędu do standardowego wyjścia

表示"忽略标准输入将标准错误重定向到标准输出"

有没有机会隐藏每条nohup消息?

1 个答案:

答案 0 :(得分:3)

我使用的技巧是在子shell中运行nohup并将子shell的标准错误输出重定向到/dev/null

if (nohup grep "'$arg1' '$arg2' [A-Za-z]\+" /tmp/dict.txt & ) 2>/dev/null
then : …whatever…
else : …never executed…
fi

但是,该命令的退出状态为0,即使grep无法执行任何操作(例如,我在grep: /tmp/dict.txt: No such file or directory编写了nohup.out),但退出状态为还是0,成功。这里使用的符号的一个缺点是作业是由子shell运行的,因此主进程不能等待它完成。你可以用以下方法解决这个问题:

(exec nohup grep "'$arg1' '$arg2' [A-Za-z]\+" /tmp/dict.txt ) 2>/dev/null &

这为您提供交互式终端的作业控制信息;当然,它不会在非交互式脚本中获胜。您也可以将&放在子shell之外,并在第一个命令行中的错误重定向之后放置exec,结果基本相同。