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

관련 정보