3种Linux下运行shell脚本的方法
第一种:直接输入文件路径
举例:
./script.sh
/Users/yqcd/webINFO/info_star.py
/bin/ls
说明:
- 要求文件具有可执行权限
- 如果文件在当前目录下,不能省略代表当前目录的
./
,否则只会在PATH
中寻找命令而不会寻找当前目录 - 也可以执行非shell脚本,例如可以直接运行Python脚本(需在文件中标记所需Python解释器的路径)、可以执行ELF二进制文件等
- 会作为子进程运行
第二种:解释器 <脚本路径>
举例:
sh script.sh
bash /tmp/test/script.sh
python3 /Users/yqcd/webINFO/info_star.py
说明:
- 这种方式就是将可执行文件的路径作为命令行参数传给解释器,常见Linux shell解释器有
bash
,sh
,zsh
等等 - 不需要脚本文件具有可执行权限
- 可以使用其他解释器执行非shell脚本
- 会作为子进程运行
第三种:使用source命令(点命令)
举例:
source script.sh
. ./script.sh
(注意两个点之间有空格). script.sh
说明:
- 点
.
,是source
命令的一个别名,二者是同一个命令,注意与代表当前目录的点所区分 - 这个命令是专门用来执行shell命令的
- 不会创建子进程运行,而是直接在当前shell中执行,相当于把shell脚本中的命令一条条手动敲进当前shell;正因如此,脚本对shell环境的改变(例如使用export修改环境变量)会保留于当前shell。如果使用
./script
,则脚本运行完毕后不会对当前shell有影响,使用sh script
对shell环境的影响仅限于子shell中,不会带回父shell - 不需要脚本具有可执行权限
- 它不是一个可执行二进制文件,这一点和
ls
,tree
等位于某路径下的可执行二进制文件提供的命令不同,比如ls
一般在/bin
下;而它直接由解释器提供,至少我用过的所有解释器(包括bash
,zsh
,sh
,csh
等)都提供这个命令