bash 如何将函数的输出重定向到 /dev/null

bash 如何将函数的输出重定向到 /dev/null

我有一个带有一些功能的脚本 ( ~/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

这是因为您的函数正在打印为stdoutnot 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

相关内容