流产是什么症状| 胃疼看病挂什么科| 喝酒对胃有什么伤害| 出汗太多是什么原因| 简单明了是什么意思| 孕妇缺铁吃什么| 幽门杆菌吃什么药最好| examine什么意思| 贫血吃什么维生素| 索是什么意思| 推辞是什么意思| 11月30号什么星座| kms是什么药| 发膜和护发素有什么区别| 右眼睛跳是什么意思| 肚脐眼发炎是什么原因| 死党是什么意思| 主观意识是什么意思| 三个十念什么| 做梦梦见打架是什么意思| 地主之谊是什么意思| 宫颈肥大是什么意思| 什么叫情绪| 社会很单纯复杂的是人是什么歌| 症结是什么意思| 枸杞子泡茶喝有什么好处| 待我长发及腰时下一句是什么| 牙齿痛吃什么消炎药| 增强ct是什么| 石英岩玉是什么| coa是什么意思| 咲是什么意思| 六味地黄丸是治什么的| 欣喜若狂的近义词是什么| 肺结核可以做什么运动| 为什么胃疼| 1995是什么年| 希特勒为什么要杀犹太人| 扁桃体有什么用| 请柬写伉俪什么意思| 三花聚顶是什么修为| 瘦人吃什么长胖| 芒果什么人不能吃| 梦见做手术是什么意思| 佛跳墙是什么菜| 胎儿肾盂分离是什么意思| a型rh阳性是什么意思| 食古不化是什么意思| 大枣枸杞泡水喝有什么好处| 有什么办法| 血府逐瘀片主治什么病| 智齿是什么| 睡觉流口水是什么情况| 猫条是什么| 布洛芬什么时候起效| 开心果是什么树的果实| 4.5是什么星座| 水红色是什么颜色| 反流性食管炎是什么症状| 农历七月是什么月份| 布洛芬有什么作用| r医学是什么意思| 清华校长什么级别| 六月份适合种什么蔬菜| 脑梗长期吃什么药好| 乙肝表面抗原250是什么意思| 蝴蝶骨是什么| 二级建造师什么时候出成绩| 胎儿左心室灶状强回声是什么意思| 吃什么治疗便秘| 嗓子痒干咳是什么原因| 尿液发黄什么原因| 维生素c对身体有什么好处| 乌龟下蛋预示着什么| 胃溃疡是什么原因引起的| 如花是什么意思| 胎儿肾积水是什么原因引起的| 阿奇霉素和头孢有什么区别| 木乐读什么| 小孩腿疼膝盖疼可能是什么原因| 01年属什么生肖| 抗核抗体是什么意思| 扁桃体发炎可以吃什么水果| 什么的摇动| 尿蛋白弱阳性是什么意思| 蝗虫的呼吸器官是什么| 欲钱知吃月饼是什么生肖| 肾亏和肾虚有什么区别| 3月19日什么星座| 代肝是什么意思| 八字伏吟是什么意思| 冰是什么意思| 肩周炎吃什么药效果最好| 口腔医学技术可以考什么证| 慷慨什么意思| 鼻窦炎吃什么药| 状况是什么意思| 普洱茶什么季节喝好| 牙周炎挂什么科| 吃什么排湿气| 冬至吃什么馅的饺子| 心脏疼是什么原因| 关元穴在什么位置| bolon是什么牌子眼镜| 胜造七级浮屠是什么意思| 朋友圈提到了我是什么意思| 连城诀为什么不火| 人为什么要日b| 脱落细胞学检查是什么| 蜘蛛痣长什么样| 女性外痔擦什么药膏好| 肛裂出血和痔疮出血有什么区别| acei是什么意思| 1989是什么生肖| 脱发是什么病| 秋老虎是什么意思| 观落阴是什么意思| 鸽子是什么意思| 纳粹是什么意思| 盥洗是什么意思| 特效药是什么意思| 反水什么意思| 白毫银针属于什么茶| 平面模特是做什么的| 张柏芝什么星座| 水痘是什么样的| 85年属什么的生肖| 物理压榨油是什么意思| 发烧为什么不能吃鸡蛋| 气节是什么意思| 阳痿是什么| 左腰疼是什么原因| 嘉兴有什么大学| 贫血什么意思| 汗疱疹用什么药膏| rbc是什么意思| 四个月宝宝可以吃什么辅食| 看幽门螺旋杆菌挂什么科| esp是什么意思| 头出汗多是什么原因| 吉人天相好福气指什么生肖| 泰迪吃什么| 眼睛胀是什么原因| 黄体生成素高是什么原因| 五代十国是什么意思| 医生说宝宝趴着在暗示着什么| 青睐什么意思| kiki是什么意思| 虎配什么生肖最好| 双鱼座上升星座是什么| 吃什么东西越吃越饿| 7月20号是什么星座| 凉烟都有什么牌子| 脾虚湿气重喝什么茶| 肩膀麻木是什么原因引起的| 心脏彩超主要检查什么| 7.14号是什么节日| 黄芪的功效是什么| 别无他求是什么意思| 花中皇后是什么花| 三月十七是什么星座| 状元郎是什么生肖| 小孩子肚子痛吃什么药| 心火旺吃什么| 痛风可以吃什么水果| 腿上起水泡是什么原因| 什么人不能吃绿豆| 二次元是什么| 什么是幽门螺旋杆菌| 肝火旺是什么意思| 什么姿势舒服| 为什么得甲亢| 铁达时手表什么档次| 南乳和腐乳有什么区别| 七月八号是什么星座| 转网是什么意思| 4月8日什么星座| 肺气肿是什么意思| 女人右下巴有痣代表什么| 鱼日羽念什么| 成双成对是什么生肖| 宫颈息肉有什么症状| 老人经常头晕是什么原因引起的| 三合生肖是什么意思| 3月24日是什么星座| 半边脸疼是什么原因| 什么的香味| 姓丁的女孩起什么名字好| 67什么意思| 心阳虚吃什么中成药| 蒙古族的那达慕大会是在什么时候| 乏力是什么感觉| 宝宝不爱吃饭是什么原因| 灰指甲是什么症状| 紫绀是什么症状| 吃什么补精| 芒果鱼是什么鱼| 凌迟是什么意思| 奶咖色是什么颜色| 挂了是什么意思| 脾胃虚弱有什么症状| 11月份生日是什么星座| 什么茶养肝护肝| 唐顿庄园讲的是什么| 内蒙古有什么特产| 什么什么分明的成语| 88年属什么的| 太君是什么意思| 骨刺吃什么药| 六月份是什么季节| 颌下淋巴结肿大挂什么科| 摩羯女和什么星座最配| 眼圈黑是什么原因| 中药龙骨是什么东西| 什么是复句| 血小板低是什么原因引起的| 献血前检查什么项目| 女性阴部潮湿是什么原因| 口臭吃什么药最有效| 真丝乔其纱是什么面料| 前列腺钙化灶是什么| 自投罗网是什么意思| 油面是什么| 田五行属什么| 酸角是什么| 身心疲惫是什么意思| 背痛挂什么科| 小孩睡觉出很多汗是什么原因| 小月子可以吃什么水果| 尿素氮偏高是什么意思| 骨质密度增高是什么意思| 鸭屎香为什么叫鸭屎香| 梦见自己生了个女孩是什么意思| 水垢是什么| 胆囊炎挂什么科室| 核能是什么| pending是什么意思| 短效避孕药是什么| 2月1日是什么星座| 唐筛是检查什么| barry什么意思| 什么渐渐什么| 头顶冒汗是什么原因| cnn是什么意思| 哺乳期可以吃什么水果| 男人吃什么容易生儿子| 保泰松是什么药| 一九八三年属什么生肖| 私处长痘痘是什么原因| 三个降号是什么调| 远香近臭什么意思| 下肢血管堵塞吃什么药| 来大姨妈适合吃什么水果| 心跳过快用什么药| 因果报应是什么意思| 高压高是什么原因| 柴鸡蛋是什么| 槐米是什么| 荷花什么时候开放| got什么意思| 腿血栓什么症状| 猪头肉是什么意思| 鼻炎看什么科| 岁月蹉跎是什么意思| 百度

电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>嵌入式开发>shell编程之 shell问答录

奇迹页游新作《遗失的大陆》四大职业组队来袭

2025-08-05 | rar | 0.3 MB | 次下载 | 1积分

资料介绍

分享到: 前些天在CU上讨论一个统计正在执行的脚本数量的问题过程中,发现自己对于shell如何执行命令方面了解还是甚少,惭愧惭愧。..期间得到waker兄的指点,在此表示感谢!他的说法除了个别地方不太准确外,基本上是正确的。这些天抽时间找了些资料研究了一下,又学到了不少!这里把我的一点心得以问答的形式贴出来,供大家参考。小弟才疏学浅,错误的地方一定很多,欢迎大家拍砖、指正!
  Q1: shell如何执行“简单”命令?
  A: 这里的简单命令和bash参考手册里的含义相同,形式上一般是:命令的名称加上它的参数。有三种不同的简单命令:
  1.内置命令(builtin)
  是shell解释程序内建的,有shell直接执行,不需要派生新的进程。有一些内部命令可以用来改变当前的shell环境,如:
  cd /path
  var=value
  read var
  export var
  。..
  2.外部命令(“external command” or “disk command”)
  二进制可执行文件,需要由磁盘装入内存执行。会派生新的进程,shell解释程序会调用fork自身的一个拷贝,然后用exec系列函数来执行外部命令,然后外部命令就取代了先前fork的子shell。
  3.shell脚本(script)
  shell解释程序会fork+exec执行这个脚本命令,在exec调用中内核会检查脚本的第一行(如:#!/bin/sh),找到用来执行脚本的解释程序,然后装入这个解释程序,由它解释执行脚本程序。解释程序可能有很多种,各种shell(Bourne shell,Korn shell cshell,rc及其变体ash,dash,bash,zshell,pdksh,tcsh,es.。.),awk,tcl/tk,expect,perl,python,等等。在此解释程序显然是当前shell的子进程。如果这个解释程序与当前使用的shell是同一种shell,比如都是bash,那么它就是当前shell的子shell,脚本中的命令都是在子shell环境中执行的,不会影响当前shell的环境。
  Q2: shell脚本是否作为单独的一个进程执行?
  A: 不是,shell脚本本身不能作为一个进程。如上面讲的,shell脚本由一个shell解释程序来解释、运行其中的命令。这个shell解释程序是单独的一个进程,脚本中的外部命令也都作为独立进程依次被运行。这也就是为什么ps不能找到正在运行的脚本的名字的原因了。作为一个替代方案,你可以这样调用脚本:
  sh script-name
  这时shell解释程序“sh”作为一个外部命令被显式地调用,而script-name作为该命令的命令行参数可以被我们ps到。
  另外,如果你的系统上有pidof命令可用,它倒是可以找出shell脚本进程(实际上应该是执行shell脚本的子shell进程)的进程ID:
  pidof -x script-name
  Q3: shell何时在子shell中执行命令?
  A: 在此我们主要讨论Bourne shell及其兼容shell。在许多情况下shell会在子shell中执行命令:
  1.(。..)结构
  小括号内的命令会在一个子shell环境中执行,命令执行的结果不会影响当前的shell环境。需要注意是此时变量$$会显示当前shell的进程id,而不是子shell的进程id。
  参考:
  {。..;}结构中的命令在当前shell中执行,(内部)命令执行的结果会影响当前的shell环境。
  2.后台执行或异步执行
  command&
  命令由一个子shell在后台执行,当前shell立即取得控制等候用户输入。后台命令和当前shell的执行是并行的,但没有互相的依赖、等待关系,所以是异步的并行。
  3.命令替换
  `command`(Bourn shell及兼容shell/csh)
  $(command)(在ksh/bash/zsh中可用)
  将command命令执行的标准输出代换到当前的命令行。command在子shell环境中执行,结果不会影响当前的shell环境。
  4.管道(不同的shell处理不同)
  cmd1|cmd2
  cmd1和cmd2并行执行,并且相互有依赖关系,cmd2的标准输入来自cmd1的标准输出,二者是“同步”的。
  对管道的处理不同的shell实现的方式不同。
  在linux环境下大多数shell(bash/pdksh/ash/dash等,除了zshell例外)都将管道中所有的命令在子shell环境中执行,命令执行的结果不会影响当前的shell环境。
  Korn shell的较新的版本(ksh93以后)比较特殊,管道最后一级的命令是在当前shell执行的。这是一个feature而非BUG,在POSIX标准中也是允许的。这样就使下面的命令结构成为可能:
  command|read var
  由于read var(read是一个内部命令)在当前shell中执行,var的值在当前shell就是可用的。
  反之bash/pdksh/ash/dash中read var在子shell环境中执行,var读到的值无法传递到当前shell,所以变量var无法取得期望的值。类似这样的问题在各种论坛和news group中经常被问到。个人认为command|read var的结构很清晰,并且合乎逻辑,所以我认为Korn shell的这个feature很不错。可惜不是所有的shell都是这样实现的。:(如开源的pdksh就是在子shell执行管道的每一级命令。
  Korn shell对管道的处理还有一个特殊的地方,就是管道如果在后台执行的话,管道前面的命令会由最后一级的命令派生,而不是由当前shell派生出来。据说Bourne shell也有这个特点(标准的Bourne shell没有测试环境,感兴趣的朋友有条件的可以自行验证)。但是他们的开源模仿者,pdksh和ash却不是这样处理。
  最特殊的是zshell,比较新的zshell实现(好像至少3.0.5以上)会在当前shell中执行管道中的每一级命令,不仅仅是最后一条。每一条命令都由当前shell派生,在后台执行时也是一样。可见在子sehll中执行管道命令并不是不得已的做法,大概只是因为实现上比较方便或者这样的处理已经成为unix的传统之一了吧。;-)
  让我们总结一下,不同的shell对管道命令的处理可能不同。有的shell中command|read var这样的结构是ok的,但我们的代码出于兼容性的缘故不能依赖这一点,最好能避免类似的代码。
  5.进程替换(仅bash/zsh中,非POSIX兼容)
  《(。..)
  》(。..)
  与管道有点类似,例子:cmd1 《(cmd2) 》(cmd3), cmd1, cmd2, cmd3的执行是同步并行的。
  《(command)形式可以用在任何命令行中需要填写输入文件名的地方,command的标准输出会被该命令当作一个输入文件读入。
  》(command)形式可以用在任何命令行中需要填写输出文件的地方,该命令的输出会被command作为标准输入读入。
  两种形式中的command都在子shell环境中执行,结果不会影响当前的shell环境。
  6.if或while命令块的输入输出重定向
  在SVR4.2的Bourne shell中对此情况会fork一个子shell执行if块和while块中的命令;在linux下似乎其它的shell中都不这样处理。
  7.协进程(ksh)
  只有Korn shell和pdksh有协进程的机制(其它shell中可以用命名管道来模拟)。类似于普通的后台命令,协进程在后台同步运行,所以必须在子shell中运行。协进程与后台命令不同的是它要和前台进程(使用read -p和print -p)进行交互,而后者一般只是简单地异步运行。
  Q4: 既然在当前shell中执行命令也会派生子shell,那么它与在子shell中执行命令又有什么区别呢?
  A: 这种说法不准确。
  在当前shell中执行内部命令不会派生子shell,因此有些内部命令才能够改变当前的shell执行环境。
  在当前shell中执行外部命令或脚本时会派生子shell,所以这时命令的执行不会影响当前 的shell环境。注意:子shell中执行的内部命令只会改变子shell的执行环境,而不会改变当前shell(父shell)的环境。
  Q5: 怎样把子shell中的变量传回父shell?
  A: 例如(echo “$a”) | read b不能工作,如何找到一个替代方案?下面给出一些可能的方案:
  1.使用临时文件
  。..
  #in subshell
  a=100
  echo “$a”》tmpfile
  。..
  #in parent
  read b
  2.使用命名管道
  mkfifo pipef
  (。..
  echo “$a” 》 pipef
  。..)
  read b
  3.使用coprocess(ksh)
  ( echo “$a” |&)
  read -p b
  4.使用命令替换
  b=`echo “$a”`
  5.使用eval命令
  eval `echo “b=$a”`
  6.使用here document
  read b 《`echo “$a”`
  END
  7.使用here string(bash/pdksh)
  read b 《《《`echo “$a”`
  8.不用子shell,用。命令或source命令执行脚本。
  即在当前shell环境下执行脚本,没有子shell,也就没有了子shell的烦恼。:)
  解决的方法还不止于此,其它的进程间通信手段应该也能使用,这有待于大家一起发掘了。^_^
?
下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

百度 在《新华字典》修订者名单中,汇聚了一批声名卓著的学术大家:叶圣陶、魏建功、邵荃麟、陈原、丁声树、金克木、周祖谟……其中,叶圣陶曾以出版总署副署长的身份,亲自担任《新华字典》的终审工作,这在中国辞书史上,应该是唯一的特例。

查看更多

下载排行

本周

  1. 1TC358743XBG评估板参考手册
  2. 1.36 MB  |  330次下载  |  免费
  3. 2开关电源基础知识
  4. 5.73 MB  |  6次下载  |  免费
  5. 3100W短波放大电路图
  6. 0.05 MB  |  4次下载  |  3 积分
  7. 4嵌入式linux-聊天程序设计
  8. 0.60 MB  |  3次下载  |  免费
  9. 5基于FPGA的光纤通信系统的设计与实现
  10. 0.61 MB  |  2次下载  |  免费
  11. 6基于FPGA的C8051F单片机开发板设计
  12. 0.70 MB  |  2次下载  |  免费
  13. 751单片机窗帘控制器仿真程序
  14. 1.93 MB  |  2次下载  |  免费
  15. 8基于51单片机的RGB调色灯程序仿真
  16. 0.86 MB  |  2次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234315次下载  |  免费
  3. 2555集成电路应用800例(新编版)
  4. 0.00 MB  |  33564次下载  |  免费
  5. 3接口电路图大全
  6. 未知  |  30323次下载  |  免费
  7. 4开关电源设计实例指南
  8. 未知  |  21548次下载  |  免费
  9. 5电气工程师手册免费下载(新编第二版pdf电子书)
  10. 0.00 MB  |  15349次下载  |  免费
  11. 6数字电路基础pdf(下载)
  12. 未知  |  13750次下载  |  免费
  13. 7电子制作实例集锦 下载
  14. 未知  |  8113次下载  |  免费
  15. 8《LED驱动电路设计》 温德尔著
  16. 0.00 MB  |  6653次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935054次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537796次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420026次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234315次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233046次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191185次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183278次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138040次下载  |  免费
周公解梦是什么意思 得了性疾病有什么症状 曾舜晞是什么星座 舌苔发黑是什么原因引起的 军字五行属什么
头疼恶心是什么症状 肾上腺是什么 失眠吃什么药 哆啦a梦大结局是什么 舌炎是什么原因引起的怎样治疗
图灵测试是什么 后生可畏是什么意思 什么是甲沟炎 mrmrs是什么牌子 青年节是什么生肖
吃什么食物养胃 婕字五行属什么 四叶草代表什么意思 心脏下面是什么器官 tiamo是什么意思
打边炉是什么意思hcv8jop3ns7r.cn 视网膜为什么会脱落hcv8jop5ns3r.cn 苹果对身体有什么好处hcv9jop0ns0r.cn 知识是什么意思hcv9jop6ns6r.cn 大什么一什么hcv8jop9ns0r.cn
什么的云朵hcv9jop3ns5r.cn 为什么游戏hcv9jop0ns3r.cn 12月8日是什么星座hcv8jop0ns8r.cn 师长相当于地方什么级别hcv8jop9ns2r.cn 望而生畏什么意思gangsutong.com
摸头杀是什么意思hcv9jop1ns9r.cn 经心的近义词是什么hcv8jop2ns0r.cn 白玉兰奖是什么级别的hcv8jop8ns3r.cn 生日当天忌穿什么颜色hcv8jop6ns6r.cn 氧分压高是什么原因hcv9jop3ns4r.cn
吃什么可以偷偷流产liaochangning.com 吃什么能养肝护肝hcv9jop2ns6r.cn 提踵是什么意思hcv7jop6ns7r.cn 势力是什么意思zsyouku.com 嫦娥是什么生肖hcv8jop2ns5r.cn
百度