다음 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