hello
次のコードを含む実行可能なスクリプトがあります。
#!/bin/bash
echo "hello" > /dev/tty
出力を/dev/null
。
./hello > /dev/null 2>&1
stdout
とのみリダイレクトするため、機能しませんstderr
。
コマンドを使用してこれを行うことができると主張する2つの答えを見つけましたscript
が、方法は説明しません。
https://unix.stackexchange.com/a/297237/421466
https://unix.stackexchange.com/a/296108/421466
それとも出力を抑制する他の方法はありますか?
答え1
スクリプトの変更
ファイル記述子3がまだ使用されていないと仮定する。
#!/bin/bash
exec 3>/dev/tty
#exec 3>/dev/null
echo "hello" >&3
/dev/tty
fd 3をまたはで開くと/dev/null
簡単に切り替えることができます。それから> /dev/tty
すべて>&3
。
スクリプトは変更されていません。
スクリプトの外側の回避策は、マウントネームスペース(man unshare
)を生成mount --bind /dev/null /dev/tty
してその中で実行し、そこから変更されていないスクリプトを実行することです。