首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash:(命令)|命令

Bash:(命令)|命令
EN

Stack Overflow用户
提问于 2014-03-07 16:29:44
回答 2查看 70关注 0票数 1

我偶然发现了Zenity,这是一个基于命令行的图形用户界面。我注意到( commands ) | command的形式有一些语法。谁能解释一下这是什么,我可以在哪里读到更多关于它的信息?

我在docs中找到了以下脚本

代码语言:javascript
复制
(
  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
EN

回答 2

Stack Overflow用户

发布于 2014-03-07 16:44:37

圆括号创建了一个子shell,它具有对当前shell的所有含义。

  • 子外壳程序不能更改父外壳程序的环境;有时,您需要一个子外壳程序,以便可以(比方说)快速cd到不同的目录,而不会影响其余脚本的工作目录。
  • 子外壳程序只有一个标准输入和一个标准输出流;这通常是启动子外壳程序
  • 当子外壳程序完成命令时(除非在后台运行它)

的原因。

如果有帮助的话,可以把( foo; bar )看作是sh -c 'foo; bar'的快捷方式。

一种相关的语法是括号,它在当前shell中运行复合命令,而不是在子shell中运行。

代码语言:javascript
复制
test -f file.rc || { echo "$0: file.rc not found -- aborting" >&2; exit 127; }

特别是exit会导致当前shell退出,并返回失败退出代码,而退出的子Shell不会直接影响父shell脚本的其余部分。

(奇怪的是,POSIX要求语句结束符在右大括号之前,但不在右括号之前。)

票数 1
EN

Stack Overflow用户

发布于 2014-03-07 16:45:28

圆括号定界子subshell,这意味着括号内的命令在单独的进程中运行,并由bash解释器的单独实例解释。在本例中,它们似乎只是使用子外壳将所有echosleep命令组合在一起,这样它们就可以通过zenity输出整个命令组的组合输出。考虑到本例中的目标是模拟进度条,这是有意义的。

您可以在此处阅读有关subshell的更多信息:http://tldp.org/LDP/abs/html/subshells.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22245086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档