일부 프로그램은 대규모 스크립트에서 시작되고 실행됩니다 stty -echo
. 어떤 프로그램인지 잘 모르겠어서 시행착오를 거쳐 찾아봐야겠네요. 프로그램이 터미널에 액세스하는 것을 방지하는 것으로 충분합니까 </dev/null 2>&1 | tee /dev/null
, 아니면 터미널에 액세스하는 다른 방법이 있습니까?
실제로 어떤 프로그램이 터미널에 액세스하는지 알 수 없습니다( strace
전체 스크립트를 시도하면 17MB가 없는 파일이 생성되므로 tcsetattr
터미널 수정은 단지 제어 문자를 쓰는 것이라고 가정합니다). 문제는 결론이 나지 않습니다. 때로는 터미널을 방해하기도 하고 때로는 그렇지 않기도 합니다.
다음 소개를 스크립트에 넣으세요.단말기 간섭이 멈춘 것 같습니다.문제가 해결되지 않습니다. 그러나 문제가 해결되지 않는 이유는 명확하지 않습니다. 프로세스가 여전히 를 통해 터미널에 액세스하고 있는지 /dev/tty
, 아니면 프로그램에서 작성한 이스케이프 코드가 여전히 를 통해 터미널에 덤프되고 있는지 여부입니다 cat
.
MKTEMP="$(mktemp)"
mkfifo "$MKTEMP".fifo
(
set +o xtrace
cat "$MKTEMP".fifo
rm -f "$MKTEMP".fifo "$MKTEMP"
) </dev/null 2>&1 &
exec 1>"$MKTEMP".fifo
exec 2>&1
exec 0</dev/null
답변1
딜레마가 해결되었습니다. 문제는 sudo -g
현재 계정에 비밀번호가 없는데도 단말기에서는 백그라운드에서 비밀번호를 요구한다는 점이다. 이것은 버그인 것 같습니다 sudo
. 계정에 비밀번호가 없으면 비밀번호를 묻지 않습니다(사용자를 변경할 때는 묻지 않고 그룹을 변경할 때만 묻습니다).
ubuntu@ubuntu:~$ sudo -u nobody ls
Desktop Documents Downloads Music Pictures Public Templates Videos
ubuntu@ubuntu:~$ sudo -g nogroup ls
[sudo] password for ubuntu:
ubuntu@ubuntu:~$
NOPASSWD:
해결 방법 은 을 추가하여 sudoers
문제를 해결하는 것이었습니다.
sudo
불확실성은 다음에 터미널을 누를 때 enter
결국 명령이 허용되고 잠시 동안 더 이상 암호를 묻지 않는다는 사실 때문입니다 .