我知道这个来源和.做同样的事情,我会惊讶地发现标题中的其他命令对不是那么相同(因为我正在运行bash作为我的
shell,$SHELL [script]和bash [script]是相当于,对吗??).
那么执行脚本的三种方法之间的区别是什么?我问,因为我刚刚得知脚本的执行是NOT the exact same.在某种程度上,我从运行“实验”和阅读手册页中找不到明显的方法.
通过在我编写的非常简单的脚本上盲目地调用这些函数,我找不到其他微妙的差异?在阅读了上述相关答案之后,我可以强烈地猜测,我的问题的答案将是一个非常简单的解释,但在某种程度上,我几乎从未完全发现自己.
这是我做过的“实验”:
$. myScript.sh "This is the output to my script. I'd like to think it's original." $source myScript.sh "This is the output to my script. I'd like to think it's original." $bash myScript.sh "This is the output to my script. I'd like to think it's original." $$SHELL myScript.sh "This is the output to my script. I'd like to think it's original." $./myScript.sh "This is the output to my script. I'd like to think it's original." $myScript.sh "This is the output to my script. I'd like to think it's original."
解决方法
.脚本和源脚本在当前环境中执行脚本的内容,即不创建子shell.从好的方面来说,这允许脚本影响当前环境,例如更改环境变量或更改当前工作目录.在缺点方面,这是一个潜在的安全隐患.
bash脚本将脚本传递给bash解释器来执行.无论什么shebang由脚本本身给予被忽略. (“Shebang”指脚本的第一行,例如可以读取#!/ bin / bash,或#!/usr/bin/perl,或#!/usr/bin/awk)来指定要使用的解释器.)
$SHELL脚本将脚本传递给您要执行的当前shell解释器.这可能是,也可能不是. (环境变量SHELL保存当前shell解释器的名称.$SHELL,如果运行bash,则计算为/ bin / bash,其效果在前一段中详述.)
./script执行当前工作目录中的文件脚本的内容.如果没有此类文件,则会生成错误. $PATH的内容对发生的事情没有影响.
脚本在$PATH中列出的目录中查找文件脚本,该脚本可能包含也可能不包含当前工作目录.执行此目录列表中的第一个脚本,可能是也可能不是当前工作目录中的脚本.