exec vscodeは出力を/ dev / nullにリダイレクトしません。

exec vscodeは出力を/ dev / nullにリダイレクトしません。

次のbashスクリプトがあります。

exec '/mnt/c/Users/WindowsUserName/AppData/Local/Programs/Microsoft VS Code/Code.exe' $@ &>/dev/null &

スクリプトを実行すると、次の結果が表示されます。

➜  ~ ./code foo.js
➜  ~
[main 2021-11-18T17:54:12.206Z] update#setState idle
[main 2021-11-18T17:54:42.215Z] update#setState checking for updates
[main 2021-11-18T17:54:42.435Z] update#setState idle

^出力はにリダイレクトされません/dev/null。誰にもアイデアはありますか?

ありがとう

答え1

一般的にstdin、、、stdoutおよびstderrは端末を指します。参照が削除されます&>/dev/null(除くstdin)。ただし、これらの参照はプロセスが端末に書き込む唯一の方法ではありません。

ctty=$(awk '{ print $7}' /proc/self/stat)
echo "controlling tty: $(( (ctty>>8) & 255 )):$(( (ctty>>20) + (ctty&255) ))"

プロセスは制御端末を開いて直接書くことができます。これはで防ぐことができますnohup

答え2

&リダイレクトする前に、コンソールからコマンドを切り離してくださいexec。次に、コマンドをデタッチしてから、そのコマンドにリダイレクトしてデタッチexecする空のコマンドを作成します。前のエントリを削除して他のエントリを保持して、コマンドが正しくリダイレ​​クトされ、切り離されるようにしたいと/dev/null思います。&>/dev/null

関連情報