第5章 理解shell

理解shell,什么是shell?

默认的系统shell设置为bash shell。
进程列表,命令之间加入分号;,包含在括号里。
在这里插入图片描述
要想知道是否生成了子shell,得借助一个使用了环境变量的命令。
echo $BASH_SUBSHELL。如果该命令返回0,就表明没有子shell。如果返回1或者其他更大的数字,就表明存在子shell。
在这里插入图片描述
数字1表明创建了子shell用于执行命令。
在这里插入图片描述
在命令列表中嵌套括号来创建子shell的子shell。

后台模式:sleep命令
sleep命令接受一个参数,该参数是你希望进程等待(睡眠)的秒数。这个命令在脚本中常用于引入一段时间的暂停。命令sleep 10会将会话暂停10秒钟,然后返回shell CLI提示符。
要想将命令置入后台模式,可以在命令末尾加上字符&。
在这里插入图片描述
sleep命令会在后台( &)睡眠3000秒( 50分钟)。当它被置入后台,在shell CLI提示符返回之前,会出现两条信息。第一条信息是显示在方括号中的后台作业( background job)号。第二条是后台作业的进程ID( 2396)。
使用jobs命令可以显示出当前运行在后台模式中的所有用户的进程。-l还可以显示出命令的PID。

在这里插入图片描述
进程列表是运行在子shell中的一条或多条命令。

协程:同时做两件事。
coproc命令
除了会创建子shell之外,协程基本上就是将命令置入后台模式。屏幕显示后台作业号以及进程ID。
你可以使用命令的扩展语法自己设置这个名字。
在这里插入图片描述
扩展语法写起来有点麻烦。必须确保在第一个花括号( {)和命令名之间有一个空格。还必须保证命令以分号( ;)结尾。另外,分号和闭花括号( })之间也得有一个空格。

只有在拥有多个协程时才需要对协程进行命名,否则让coproc命令将其设置成默认名字即可。

外部命令(文件系统命令),不是shell程序的一部分。外部命令程序通常位于/bin、 /usr/bin、 /sbin或/usr/sbin中。

内建命令不需要使用子进程来执行,不需要外部程序文件来运行。可以利用type命令来了解某个命令是否是内建的。

history命令:跟踪用过的命令
你可以唤回并重用历史列表中最近的命令。这样能够节省时间和击键量。输入!!,然后按回车键就能够唤出刚刚用过的那条命令来使用。
命令历史记录被保存在隐藏文件.bash_history中,它位于用户的主目录中。
在这里插入图片描述
$history -a 可以在退出shell会话之前强制将命令历史记录写入.bash_history文件。
注意, history命令和.bash_history文件的输入是一样的,除了最近的那条history命令,因为它是在history -a命令之后出现的。

你可以唤回历史列表中任意一条命令。只需输入惊叹号和命令在历史列表中的编号即可。

小结

本章讨论了复杂的交互式程序: GUN bash shell。
shell进程及其关系
如何生成子shell:bash命令/使用进程列表或coproc命令也可以产生子shell
子shell与父shell的关系,子shell代价不低
内建命令和外建命令

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yasin墨染锦年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值