微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – 有什么区别:“. [script]“或”source [script]“,”bash [script]或$SHELL [script]“,和”./ [script]“或”[script]“?

我知道这个来源和.做同样的事情,我会惊讶地发现标题中的其他命令对不是那么相同(因为我正在运行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中列出的目录中查找文件脚本,该脚本可能包含也可能不包含当前工作目录.执行此目录列表中的第一个脚本,可能是也可能不是当前工作目录中的脚本.

原文地址:https://www.jb51.cc/linux/393266.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐