Linux中运行shell脚本的几种方式
我们假设要运行的脚本名称为myscript.sh。运行shell脚本一般有以下几种方式:
- ./mysccript.sh
- sh mysccript.sh
- source myscript.sh
- . mysccript.sh
./myscript.sh
- 这种方式运行脚本需要myscript.sh在当前目录下,当然其他目录下的脚本也可以输入相应的路径来运行。./ 表示在当前目录寻找这个脚本来执行,不加 ./ 的话系统会去PATH变量中的路径去寻找这个脚本,一般情况下shell脚本又不会放到PATH路径中。
- 这种方式需要myscript脚本具有执行权限。
- 这种方式可以在脚本的首行指定解释器,如#!/bin/sh,也可以指定如python perl之类的其他解释器,不指定的话默认sh解释器。
- 这种方式运行脚本会重新启动一个子进程来运行该脚本,因此局部变量不可与其父进程共享。
sh myscript.sh
- 这样运行shell脚本实际上运行的是sh这个命令,并且把myscript当做参数传递给了sh,因此此时myscript.sh是不需要执行权限的。
- 此时脚本首行不用指定解释器,指定了也没用。
- 这种运行方式同样会重新启动一个子进程来执行脚本,因此局部变量不可与其父进程共享。
sh/bash/ksh等的区别请查阅相关资料。
source myscript.sh 和 . myscript.sh
把这两个放在一起是因为他们本质上是一回事,. 是source是别名。
- 这种方式运行脚本时会在当前进程中执行脚本。
- 这种方式运行脚本时局部变量与其父进程共享,当然export的环境变量也是可以共享的。
- 此时脚本不需要可执行权限。
$$表示当前进程号,$SEHLL表示当前shell解释器