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

通常stdinstdout、 和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并保留另一个,以便命令正确重定向和分离。

相关内容