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中列出的目录中查找文件脚本,该脚本可能包含也可能不包含当前工作目录.执行此目录列表中的第一个脚本,可能是也可能不是当前工作目录中的脚本.

相关文章

1、安装Apache。 1)执行如下命令,安装Apache服务及其扩展包...
一、先说一下用ansible批量采集机器信息的实现办法: 1、先把...
安装配置 1. 安装vsftpd 检查是否安装了vsftpd # rpm -qa | ...
如何抑制stable_secret读取关键的“net.ipv6.conf.all.stabl...
1 删除0字节文件 find -type f -size 0 -exec rm -rf {} ...
## 步骤 1:安装必要的软件包 首先,需要确保系统已安装 `dh...