我偶然发现Zenity,这是一个基于命令行的GUI。我注意到有一些( 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
答案 0 :(得分:1)
括号创建一个子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在结束括号之前需要一个语句终止符,但不是在右括号之前。)
答案 1 :(得分:1)
括号分隔子shell,这意味着parens中的命令在单独的进程中运行,并由bash解释器的单独实例解释。在这种情况下,它们似乎正在使用子shell将所有echo
和sleep
命令组合在一起,以便它们可以通过zenity管理整组命令的组合输出。鉴于此示例中的目标是模拟进度条,这是有道理的。
您可以在此处详细了解子广告:http://tldp.org/LDP/abs/html/subshells.html