如何制作可管道的bash脚本

时间:2018-06-23 10:25:33

标签: bash pipe

我正在开发一个名为Tools的bash程序包,并且我试图制作一个bash脚本,您可以通过该脚本通过管道将命令的所有输出传递给/ dev / null。

示例:

cat myfile | null

null是工具中的命令。

然后它什么也不会输出。我知道如何将输出重定向到/ dev / null或其他位置,但是,我如何制作可传递管道的脚本来做到这一点。

我当前的占位符代码:

#!/bin/bash
sudo $1 &> /dev/null

执行格式:

null cat\ myfile 

反斜杠是转义字符,因此bash知道它是一个参数,而不是两个参数。参数通常用空格分隔

2 个答案:

答案 0 :(得分:3)

要使其正常工作:

somecommand | null

您只需要包含以下内容的null脚本即可:

cat > /dev/null

cat从stdin读取并写入stdout,在这种情况下,您已将其重定向到/dev/null

请注意,这不会重定向stderr,因为管道符号(|)仅重定向stdout。您可以使用|&来重定向stdout和stderr,如下所示:

somecommand |& null

真正的问题是,为什么要为此烦恼?您可以轻松地运行:

somecommand > /dev/null

或者:

somecommand >& /dev/null

更新

哇,bash 3.2?太老了该版本的bash不支持|&运算符。您可以完成以下相同操作:

somecommand 2>&1 | null

上面写着“将stderr重定向到stdout,然后将stdout重定向到管道”。

答案 1 :(得分:1)

这里过多地使用了猫。您的脚本所需要做的就是

list(...)

如果您也想对stderr进行核对,

exec >/dev/null

请注意,exec >/dev/null 2>/dev/null 不带命令会使其重定向适用于脚本的其余部分。