![bash 如何将函数的输出重定向到 /dev/null](https://linux22.com/image/95395/bash%20%E5%A6%82%E4%BD%95%E5%B0%86%E5%87%BD%E6%95%B0%E7%9A%84%E8%BE%93%E5%87%BA%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0%20%2Fdev%2Fnull.png)
我有一个带有一些功能的脚本 ( ~/func/functions.sh
),我有另一个脚本 ( ~/scripts/example.sh
)
代码:functions.sh
#!/bin/bash
function NameofFunction()
{
# do something...
echo -e "\e[31m[ ERROR ]\e[39m more text..." 1>&2
}
代码:example.sh(运行良好)
#!/bin/bash
. ~/func/functions.sh
function functioninExample()
{
#do something...
NameofFunction ${VAR1} ${VAR2}
}
functioninExample 2>/dev/null
代码:example.sh(不起作用)
#!/bin/bash
. ~/func/functions.sh
function functioninExample()
{
#do something...
NameofFunction ${VAR1} ${VAR2} 2>/dev/null
}
functioninExample
如何在不编辑函数的情况下重定向函数的回显?
NameofFunction ${VAR1} ${VAR2} 2>/dev/null
不起作用。
如何在不重定向 functioninExample 函数的情况下重定向函数中的 echo?
答案1
这是因为您的函数正在打印为stdout
not stderr
,请尝试
NameofFunction ${VAR1} ${VAR2} >/dev/null
或重定向两者stderr
和 stdout
:
NameofFunction ${VAR1} ${VAR2} >/dev/null 2>&1
请注意,将错误打印到 是一种很好的风格stderr
,因此您应该更好地更改您的函数,而不是上面的答案,如下所示:
echo -e "\e[31m[ ERROR ]\e[39m more text..." 1>&2