脚本执行命令实例详解

使用linux不免要用到执行脚本,比如一个文件a.sh,我们有时会见到用. a.sh去执行,有时见到用sh a.sh去执行,或者bash a.sh,或者source a.sh,那么这两种执行脚本的方式有什么区别呢?这个问题也困惑了本人很久,今天总结一下:
首先考虑这样子一种情况:
我的作用文件有时候路径比较长,为什么不创建一个脚本放在初始路径下,这样运行一下直接到到位,于是有了下面的welcome.sh,内容为:

#!/bin/bash
echo "cd /opt/jskp/jinjiwei"
cd /opt/jskp/jinjiwei

其中#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。 echo 命令用于向窗口输出文本。

保存到根目录下,执行
1、. welcome.sh方法执行:
这里写图片描述
如图可见,两条语句都被执行,第一条执行输出第二条命令,第二条命令执行进入对应目录。
2、source welcome.sh方法执行:
这里写图片描述
3、bash welcome.sh方法执行:
这里写图片描述
4、sh welcome.sh方法执行:
这里写图片描述
可以看出,.或source对于脚本中的语句可以全部执行,但是sh或bash只能执行第一条语句,而且不管有没有解释器信息结果都是一样的哦,很奇怪的现象,现象解释:

这样执行的话终端会产生一个子shell(类似于C语言调用函数),子shell去执行我的脚本,在子shell中已经切换了目录了,但是子shell一旦执行完,马上退出,子shell中的变量和操作全部都收回。回到终端根本就看不到这个过程的变化。引用文档

这种情况下可以使用.或source方法解决哦,因为.或source与加载资源类似,把脚本当作程序加载运行。


所以推荐使用. a.shsource a.sh执行脚本哦。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章