shell运行sh脚本的4种方式和区别
test.sh 方式一要求test.sh必须有可执行权限,方式二、三、四 有没有可执行权限都可以
方式一:./test.sh ./(点斜杠)的意思是执行当前目录下的某个可执行文件, 此方式文件必须是可执行文件, 如果没有 chmod u+x filename 可赋予文件执行权限。 启动另一个Shell去执行脚本(另一个进程),所以./点斜杠执行脚本时,设置的环境变量会随着进程的退出而结束,其中的环境变量设置对当前Shell不起作用。
方式二:bash test.sh 或 bash ./test.sh bash 某个脚本, 启动另一个Shell去执行脚本(另一个进程)执行脚本里的命令。设置的环境变量会随着进程的退出而结束,其中的环境变量设置对当前Shell不起作用。 文件是不是可执行文件都可以。
方式三:. test.sh 或 . ./test.sh . (点空格)某个脚本文件,相当于利用source文件执行这个脚本, 在当前bash环境下读取并执行test.sh中的命令,设置的环境变量会对当前Shell其作用 。文件是不是可执行文件都可以。
方式四:source test.sh 或 source ./test.sh source 在当前bash环境下读取并执行test.sh中的命令,设置的环境变量会对当前Shell其作用 。文件是不是可执行文件都可以。
方式三、四:. (点空格)与source 等价。
是否启动新shell运行结果不同的示例
export Hello="Hello World"
(1)启动 新shell方式:没有对当前Shell起作用。
$ ./test.sh
$ echo $Hello
执行结果:(空)
(2) 当前shell方式: 对当前Shell设置此环境变量
$ . ./test.sh或. test.sh或source test.sh
$ echo $Hello
执行结果:Hello World