我运行命令,我想从标准错误中消除包含“ nohup”的行。为此,我交换标准输入和标准错误,并过滤“ nohup”。然后,我再次交换它们以返回初始状态。像这样:
nohup COMMAND 3>&1 1>&2 2>&3 | grep -v nohup 3>&1 1>&2 2>&3 &
然后我进入文件,然后过滤出密码:
nohup COMMAND 3>&1 1>&2 2>&3 | grep -v nohup 3>&1 1>&2 2>&3 | tee FILE.log | grep -v "password" &
我不知道为什么grep -v "password"
在这里不起作用。
如果我不进行双文件描述符交换,则会这样做:
nohup COMMAND | tee FILE.log | grep -v "password" &
您对此有任何想法吗?
答案 0 :(得分:2)
在nohup COMMAND 3>&1 1>&2 2>&3 | grep -v nohup 3>&1 1>&2 2>&3
中,您交换了nohup
的stdout和stderr,以前的stderr进入了管道。以前的标准输出到哪里去? stderr最初指向的地方可能是终端。 grep
的交换不会影响那个。
您可能需要执行以下操作:
(nohup COMMAND 2>&1 1>&3 | grep -v nohup 1>&2) 3>&1 | tee FILE.log | grep -v "password" &
或者使用bash进程替换将stderr仅发送到grep:
nohup COMMAND 2> >(grep -v nohup >&2) | tee FILE.log | grep -v "password" &