【发布时间】:2021-12-12 00:48:34
【问题描述】:
我正在脚本中运行以下命令:
kubectl cp -n $OVN_NAMESPACE -c ovnkube-node $ovnkube_node:$save_dir ${WORKDIR}/restore_flows
但是,它每次运行时都会向 stderr 输出“tar:从成员名称中删除前导 `/'”。除此之外,它运行良好,但是,我需要删除此错误消息。我只会将所有标准错误发送到 /dev/null,但我希望保留其他可能真正重要的错误。
因此,我的问题是是否可以使用 grep 或 sed 从输出中删除特定错误消息并允许其他人通过?
【问题讨论】:
-
使用
2>&1将标准错误重定向到标准输出。然后你可以通过管道将它发送到grep -v。 -
我想不出理由。
-
请参阅How can I pipe stderr and not stdout? 了解有关管道标准错误的讨论。有关过滤标准错误的讨论,请参阅How can. I exclude all "permission denied" messages from
find?。 -
@sdaniele 我不知道
kubectl。是否有可能提示您回答问题?它可能会将提示写入stderr,并且缓冲会阻止您看到它。 -
实际上,我可能知道问题所在——如果您启用了
set -e,那么如果stderr 上根本没有消息,grep -v可以返回非零返回状态。 In general,set -eis a bad idea.
标签: bash sed grep stdout stderr