Bash脚本:使用管道将字符串写入文件而不向终端输出任何内容

时间:2014-10-25 06:25:09

标签: bash file sed pipe

对不起标题,我找不到合适的词来解释我的问题。

以下是代码:

wlan_c=$(iwconfig | sed '/^\(w.*$\)/!d;s/ .*//' > ./wifi_iface)
wlan=$(<./wifi_iface)
echo "$wlan"

我得到以下输出:

lo no wireless extensions.
enp4s0 no wireless extensions.
wlp2s0

最后一行是执行echo "$wlan"的结果 前面的行来自iwconfig,那些未被sed格式化的行 文件./wifi_iface也有我需要的信息 一切都按预期工作。

所以我真的想在wlp2s0行之前摆脱那些不需要的输出 我该如何设法做到这一点?

1 个答案:

答案 0 :(得分:2)

该输出必须转到stderr而不是stdout。将其重定向到/dev/null

iwconfig 2>/dev/null | sed '/^\(w.*$\)/!d;s/ .*//' > ./wifi_iface

无需将此内容分配给wlan_c。由于您正在写入文件,因此不会将任何内容写入stdout,因此作业将始终为空。