zenityの進捗状況を得るためにプロセスの外部にデータを渡す方法は?

zenityの進捗状況を得るためにプロセスの外部にデータを渡す方法は?

通常、これは子プロセスから基本プロセスにデータを渡す方法についての質問ですが、いくつかの追加のzenity問題がある可能性があるので注意してくださいzenity

例:

#!/bin/sh
(
echo "10" ; sleep 1
echo "# Updating mail logs" ; sleep 1
echo "20" ; sleep 1
echo "# Resetting cron jobs" ; sleep 1
echo "50" ; sleep 1
echo "This line will just be ignored" ; sleep 1
echo "75" ; sleep 1
echo "# Rebooting system" ; sleep 1
echo "100" ; sleep 1
) |
zenity --progress \
  --title="Update System Logs" \
  --text="Scanning mail logs..." \
  --percentage=0

# ... here main process continues (x)

実際、すべてのステップが失敗する可能性があります(echo - tar、md5の計算、圧縮、解凍、命名など)。たとえば、ERR変数をいくつかのメッセージに設定し、進行中のサブプロセスを終了して内容を表示したいとします。エラーが発生して終了します。

問題は、ERRがローカル変数であるため、子プロセスを中断できますが、まだERRを外部に渡すことができないことです。また、子プロセスが失敗したことを認識せずにデフォルトスクリプトが続行されるため、ローカルで表示することもできません。

したがって、質問は、エラーコード、メッセージ、またはその他の項目を基本プロセス(ポイント(x)で継続)にどのように渡すのですか?

プロセスの代替:

#!/bin/sh
zenity --progress \
  --title="Update System Logs" \
  --text="Scanning mail logs..." \
  --percentage=0 < <(
echo "10" ; sleep 1
echo "# Updating mail logs" ; sleep 1
...

これは私にとってもうまくいきません。つまり、デフォルトスクリプトにERRは表示されません。

ベストアンサー1

おそらくあなたが望むのはPIPESTATUSです(man bashから:)。

An array variable (see Arrays below) containing a list of exit status 
values from the processes in the most-recently-executed foreground pipeline 
(which may contain only a single command).

おすすめ記事