次の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