- 사용자 "직원"이 실행하는 스크립트
zenity --progress
. - 그런 다음 호출합니다
sudo -u adminBod adminScript
(그리고 STDOUT 및 STDERR은 로거에 수집됩니다). adminScript
업데이트를 제공하기 위해 실행 중인 프로그램이adminBod
zenity의 STDIN에 쓸 수 있기를 바랍니다 .
1번 시도
나는 채널 3을 zenity의 STDIN에 연결한 다음 sudo 프로세스에서 작성할 수 있다고 생각했습니다.
#!/bin/bash
# Main script, run by 'staffer'
{
echo "# Starting work"
exec 3>&1
sudo -u adminBod adminScript 2>&1 | logger -t myTag
exec 3>&-
echo "100" # tells Zenity we're at 100% and it can close
} zenity --progress --auto-close
#!/bin/bash
# adminScript, run by adminBod
echo "# some message for zenity" >/dev/fd/3
echo "# some message for zenity" >&3
/dev/fd/3
존재하지 않기 때문에 작동하지 않습니다 adminBod
.
2번 시도
그런 다음 다음과 같은 명명된 파이프를 사용할 수 있다고 생각했습니다.
staffer% mkfifo -m666 thePipe
staffer% zenity --progress --auto-close <thePipe &
staffer% sudo -u adminBod bash
adminBod% echo '# some update'>/home/staffer/thePipe
이는 Zenity가 메시지를 받았지만 채널/파이프를 닫아(정확한 용어를 모르기 때문에) 더 이상 업데이트를 작성할 수 없기 때문입니다.
답변1
exec 3>thePipe
나는 다음을 사용하여 약간의 진전을 이루었습니다 ...
staffer% mkfifo -m666 thePipe
staffer% zenity --progress --auto-close <thePipe &
staffer% sudo -u adminBod bash
adminBod% exec 3>/home/staffer/thePipe
adminBod% echo '# some update' >&3
adminBod% sleep 1
adminBod% echo '# some new update' >&3
adminBod% sleep 1
adminBod% echo '100' >&3 # will close due to --auto-close
adminBod% exit # this will also close '3' and cause zenity to close
하지만 문제는 adminBod 세션이 종료되면 파이프라인도 종료된다는 것입니다. sudo 하위 프로세스가 끝난 후에도 zenity가 계속 실행되기를 원합니다.
exec 3>thePipe
직원 프로세스에 a를 추가하면 문제가 해결되는 것으로 나타났습니다 .
staffer% mkfifo -m666 thePipe
staffer% zenity --progress --auto-close <thePipe &
staffer% zenityPid=$!
staffer% exec 3>thePipe #