我偶然发现了Zenity,这是一个基于命令行的图形用户界面。我注意到( commands ) | command的形式有一些语法。谁能解释一下这是什么,我可以在哪里读到更多关于它的信息?
我在docs中找到了以下脚本
(
echo "10" ; sleep 1
echo "# Updating mail logs" ; sleep 1
echo "50" ; sleep 1
echo "This line will just be ignored" ; sleep 1
echo "100" ; sleep 1
) |
zenity --progress \
--title="Update System Logs" \
--text="Scanning mail logs..." \
--percentage=0发布于 2014-03-07 16:44:37
圆括号创建了一个子shell,它具有对当前shell的所有含义。
cd到不同的目录,而不会影响其余脚本的工作目录。的原因。
如果有帮助的话,可以把( foo; bar )看作是sh -c 'foo; bar'的快捷方式。
一种相关的语法是括号,它在当前shell中运行复合命令,而不是在子shell中运行。
test -f file.rc || { echo "$0: file.rc not found -- aborting" >&2; exit 127; }特别是exit会导致当前shell退出,并返回失败退出代码,而退出的子Shell不会直接影响父shell脚本的其余部分。
(奇怪的是,POSIX要求语句结束符在右大括号之前,但不在右括号之前。)
发布于 2014-03-07 16:45:28
圆括号定界子subshell,这意味着括号内的命令在单独的进程中运行,并由bash解释器的单独实例解释。在本例中,它们似乎只是使用子外壳将所有echo和sleep命令组合在一起,这样它们就可以通过zenity输出整个命令组的组合输出。考虑到本例中的目标是模拟进度条,这是有意义的。
您可以在此处阅读有关subshell的更多信息:http://tldp.org/LDP/abs/html/subshells.html
https://stackoverflow.com/questions/22245086
复制相似问题