shell – 如何在进程外传递数据以进行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是局部变量,所以我可以打破子进程,但是我不能在外面传递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.

最佳答案
你可能想要的是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).

转载注明原文:shell – 如何在进程外传递数据以进行zenity进度? - 代码日志