Shell组命令
Shell 组命令的写法有两种:
{ command1; command2; command3; . . . }
(command1; command2; command3;. . . )
两种写法的区别在于:由花括号{}包围起来的组命名在当前 Shell 进程中执行,而由小括号()包围起来的组命令会创建一个子 Shell,所有命令都在子 Shell 中执行。
对于第一种写法,花括号和命令之间必须有一个空格,并且最后一个命令必须用一个分号或者一个换行符结束。
子 Shell 就是一个子进程,是通过当前 Shell 进程创建的一个新进程。但是子 Shell 和一般的子进程(比如bash ./test.sh创建的子进程)还是有差别的,我们将在《子Shell和子进程》一节中深入讲解,读者暂时把子 Shell 和子进程等价起来就行。
组命令可以将多条命令的输出结果合并在一起,在使用重定向和管道时会特别方便。
例如,下面的代码将多个命令的输出重定向到 out.txt:
ls -l out.txt # 表示覆盖 echo http://c.biancheng.net/shell/ out.txt # 表示追加 cat readme.txt out.txt
本段代码共使用了三次重定向。
借助组命令,我们可以将以上三条命令合并在一起,简化成一次重定向:
{ ls -l; echo http://c.biancheng.net/shell/ cat readme.txt; } out.txt
或者写作:
(ls -l; echo http://c.biancheng.net/shell/ cat readme.txt) out.txt
使用组命令技术,我们节省了一些打字时间。
类似的道理,我们也可以将组命令和管道结合起来:
{ ls -l; echo http://c.biancheng.net/shell/ cat readme.txt; } | lpr
这里我们把三个命令的输出结果合并在一起,并把它们用管道输送给命令 lpr 的输入,以便产生一个打印报告。
两种组命令形式的对比虽然两种 Shell 组命令形式看起来相似,它们都能用在重定向中合并输出结果,但两者之间有一个很重要的不同:由{}包围的组命令在当前 Shell 进程中执行,由()包围的组命令会创建一个子Shell,所有命令都会在这个子 Shell 中执行。
在子 Shell 中执行意味着,运行环境被复制给了一个新的 shell 进程,当这个子 Shell 退出时,新的进程也会被销毁,环境副本也会消失,所以在子 Shell 环境中的任何更改都会消失(包括给变量赋值)。因此,在大多数情况下,除非脚本要求一个子 Shell,否则使用{}比使用()更受欢迎,并且{}的进行速度更快,占用的内存更少。
22394.html
html相关文章
- 解决:如何写一个shell脚本(脚本名称:xsync,也称:xsync命令):实现多个电脑或者虚拟机之间的文件同步?
- linux下mysql常用命令_shell命令大全
- gcc命令大全
- docker系统源加速命令
- HBase shell 命令介绍
- linux文件夹打包命令详解程序员
- HDFS shell命令详解大数据
- 装Linux命令:包装你的操作系统(linux命令包)
- Linux中清空回收站的最佳命令(linux清空回收站命令)
- 脚本Linux下重启Shell脚本实现方法(linux重启shell)
- 开启Linux系统Shell,探索更多精彩(linux系统shell)
- Linux 命令实现批量操作的简易指南(linux命令批量执行)
- Linux安装Shell快速教程(linux安装shell)
- 行之美:Linux Shell操作令人惊叹的Linux Shell:Linux命令行的妙处(linux.命令)
- 脚本Linux下如何创建Shell脚本(linux创建shell)
- Linux ls 命令卡死:困扰与解决(linuxls卡死)
- Linux命令:管理打印机(linux命令打印机)
- 简易指南:Linux主机名修改命令(linux修改主机名命令)
- 使用bc命令实现高精度计算——深入探索Linux中的bc(linux中bc)
- 轻松学习Linux删除命令,清理垃圾文件如掌控(linux删除命令)
- 实现无障碍操作,轻松掌控:远程连接Linux Shell教程(linux远程shell)
- 如何使用Redis的GET命令从内存中获取数据?(redisget命令)
- Linux下轻松使用Shell:简单、便捷、强大(linux常用shell)
- Linux 下轻松排序:du 命令实现文件管理(dulinux排序)
- 一步一步学习:Shell脚本执行Linux命令初探(shell脚本执行linux命令)
- 如何快速使用shell命令连接Redis数据库(怎么用命令链接redis)
- 查看MySQL版本使用CMD命令(cmd看mysql版本)
- 操作简单,通过Shell快速安装Redis服务(shell安装redis)
- Android执行shell命令详解
- Js使用WScript.Shell对象执行.bat文件和cmd命令