[Linux]对比source命令(点命令“.”)等3种运行shell脚本的方法

3种Linux下运行shell脚本的方法

第一种:直接输入文件路径

举例:

  1. ./script.sh
  2. /Users/yqcd/webINFO/info_star.py
  3. /bin/ls

说明:

  • 要求文件具有可执行权限
  • 如果文件在当前目录下,不能省略代表当前目录的./,否则只会在PATH中寻找命令而不会寻找当前目录
  • 也可以执行非shell脚本,例如可以直接运行Python脚本(需在文件中标记所需Python解释器的路径)、可以执行ELF二进制文件等
  • 会作为子进程运行

第二种:解释器 <脚本路径>

举例:

  1. sh script.sh
  2. bash /tmp/test/script.sh
  3. python3 /Users/yqcd/webINFO/info_star.py

说明:

  • 这种方式就是将可执行文件的路径作为命令行参数传给解释器,常见Linux shell解释器有bash, sh, zsh等等
  • 不需要脚本文件具有可执行权限
  • 可以使用其他解释器执行非shell脚本
  • 会作为子进程运行

第三种:使用source命令(点命令)

举例:

  1. source script.sh
  2. . ./script.sh(注意两个点之间有空格)
  3. . 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等)都提供这个命令
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章