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 関数をリダイレクトせずに、関数からのエコーをリダイレクトするにはどうすればよいですか?

答え1

これは関数が出力されていstdoutないためです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

関連情報