假设存在shell scripts文件为/home/myscripts/helloworld.sh,现列举如下的执行方式:
一、直接命令执行
1)绝对路径——/home/myscripts/helloworld.sh
2)相对路径——假设当前工作目录为/home/myscripts,则执行方式为./helloworld.sh
3)利用变量PATH— —将helloworld.sh脚本文件放在PATH变量中任一个目录,然后直接以helloworld.sh来执行
Remarks:
问题:在第2)条中,为什么不是直接用helloworld.sh来执行呢?因为相对于其当前工作目录/home/myscripts,./hellowold.sh和helloworld.sh都是相对路径了。假设当前工作目录为/home,那么可以通过./myscripts/helloworld.sh和myscripts/helloworld.sh来执行都可以的。这和问题上面的有什么不同呢?
解答: 如果想直接用helloworld.sh来执行成功的话,其实就要采取第3)种方式了。
二、以bash进程来执行
假设当前工作目录为/home/myscripts,则直接通过bash helloworld.sh或者sh helloworld.sh来执行
Remarks:可以使用sh helloworld.sh来执行,是因为/bin/sh就是/bin/bash的连接文件
三、以source或小数点(.)来执行
假设当前工作目录为/home/myscripts,则通过source helloworld.sh或. helloworld.sh来执行,二者是一样的哦
四、各种执行shell scripts方式的区别
a )第三种执行方式和第一、二种执行方式的区别
利用第三种方式来执行shell scripts,就会在父进程中去执行shell scripts中的命令。而第一、二两种方式,会使用一个新的bash环境来执行脚本内的命令,就是在子进程中执行脚本命令了。所以如果脚本文件中有有关变量的设置的时候,第一、二种方式下,等脚本文件执行完毕,回到父进程bash中时,在脚本文件中设置的变量已经查不到了。而第三种方式下,因为脚本文件就是在父进程bash中执行的,所以等脚本文件执行完毕,仍然可以查到在脚本文件中设置的变量。
b)第一种执行和第二种执行方式一样吗
从原理上说,二者是一样的,因为在shell scripts文件的第一行有#!/bin/bash语句,就是说要用bash来执行,相当于shell *.sh
五、Linux中命令的查找的过程
当我们在命令提示符下输入一个命令时,Linux的查找该命令的流程如下:
(1)已相对命令或决定命令去查找(像/home/jianzai/script/my_script.sh,或./my_script.sh,但是如果直接是my_script.sh的话,那就不经过第1步了,从第2步开始找了 )
(2)有alias找到命令,然后执行
(3)shell内置的命令执行
(4)在PATH环境变量设置的目录中去查找
六、备注
第一种方式需要赋予文件可执行权限,第二种方式则不要,只要有shell(或python命令)的执行权限就行了。注意python、perl脚本的执行的方式都是类似的哦。