- ユーザー「従業員」が実行するスクリプト
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 #