如何执行命令Shell脚本通常有四种执行方式:1:bash./test.sh方法2:./test.sh方法三:source./test.sh方法四:../test.sh执行方式区别方法1.如果脚本以bash方式执行,会在当前终端下生成一个bash子进程来运行脚本,因此不适用于当前受影响的环境。[root@lincodingusr]#bash./test.shmode2./test.sh运行,然后脚本第一行声明了哪个shell解释器是哪个shell解释器的子进程会生成运行脚本,如果如果声明的shell解释器是bash,则与方法一类似。因为它通过当前终端执行shell脚本,不会生成子进程,所以会影响当前环境。[root@lincodingusr]#source./test.sh[root@lincodingusr]#../test.sh上面提到的执行方式影响的比较也提到了方式一和方式二,因为它会生成子进程来执行ShellScript,所以对当前环境没有影响;而方法二和方法三,在当前终端执行Shell脚本,所以会对当前环境产生影响。比如写一个test.sh脚本来切换目录,内容如下#!/bin/bash#切换到tmp目录cd/tmp#打印当前目标pwd然后使用方法1执行test.sh脚本,结果如下:[root@lincoding/]#bashtest.sh/tmp[root@lincoding/]#pwd/可以发现使用第一种方式执行脚本不需要执行权限。方法二执行test.sh脚本,结果如??下:[root@lincoding/]#chmodu+xtest.sh[root@lincoding/]#ls-ltest.sh-rwxr--r--。1rootroot64Sep2618:34test.sh[root@lincoding/]#./test.sh/tmp[root@lincoding/]#pwd/方法一和方法二shell脚本切换到/tmp目录后执行完后,终端所在的目录没有变化,依然在/根目录下,说明方法一和方法二的执行方式对当前环境没有影响。原因是通过方式1和方式2执行Shell脚本时,会产生一个子进程来执行Shell脚本。当脚本执行结束时,子进程退出并返回到父进程,因此当前环境不会受到影响。接下来看方法三的执行结果:[root@omp120/]#source./test.sh/tmp[root@omp120tmp]#pwd/tmp方法四的执行结果:[root@omp120/]#../test.sh/tmp[root@omp120tmp]#pwd/tmp从上面方法三和方法四的执行结果可以发现,执行shell脚本切换到/tmp目录后,所在目录当前所在的终端环境已经切换到/tmp目录下,说明方法3和方法4的执行方式对当前环境有影响。总结方法一和方法二执行shell脚本时,会生成一个子进程来执行shell脚本。脚本执行后,子进程退出并返回到父进程,因此不会影响当前环境。第二种和第四种方法是在当前环境中执行Shell脚本,即在当前进程中执行Shell脚本,执行结果会影响当前环境。
