我尝试完全隐藏来自终端的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消息?
答案 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
,结果基本相同。