yanghn2002

View My GitHub Profile

这是个严肃的问题,其实一个 Shell 脚本是有很多讲究的。

作为脚本语言

就像这样:

chmod +x my_shell_script.sh
./my_shell_script.sh

这很简单。

./source

你也可以 source 你的“ Shell 脚本”,就像这样:

source my_shell_script.sh

假如你在里面定义了一个变量,那么你就可以在当前的 Shell 使用了,而上一种方法不行。
其中的区别在于,前面是把 Shell 放在子进程里面执行,后者是把 Shell 脚本放到当前的 Shell 一条一条运行,和你在终端一行一行敲出相同的内容是一样的。
当然, POSIX Shell 其实没有定义 source ,而是定义了 dot (.) ,是一样的:

. my_shell_script.sh

管道

这样就引出了另外一种脚本的运行,或者说发布方式:

curl -s | sh
wget -qO- | sh

这相当于从网络服务器上面下载 Shell 脚本,再重定向到交互式 Shell 。虽然这看起来很类似于 source ,但由于 sh 已经是一个子进程了,所以事实上这等价于把 Shell 脚本下载下来再开启一个子 Shell 运行。