用./bla.sh vs.调用脚本。bla.sh

有人可以在下面的两个示例A)和B)中向我解释外壳的作用吗?它的行为显然不同,但我无法弄清输出为何不同。

示例:
让我们在当前目录中bla.sh有一个仅用一个命令命名的脚本
echo ${0##/*} hello

A)
开始为:./bla.sh
给出:./bla.sh hello

B)
开始为:. bla.sh
给出:-bash hello

由于我在脚本中使用了此命令,因此第二个输出(由于-bash前面的“-”)会终止该命令。当然,--在获得${...}帮助之前很简单,但是我很想首先了解导致输出的原因。
我喜欢bash。和vi [m]。但是我离题了……

用户名
./bla.sh

在这里,命令是./bla.sh这使外壳程序bla.sh在当前目录中查找一个名为可执行文件的文件,然后要求内核将其作为普通程序在与外壳程序分开的进程中运行。(无论bla.shbash脚本,一个perl还是python一个,还是编译后的二进制文件都没有关系。)


. bla.sh

在这里,该命令是.(aka source),是Shell的内置命令。它使外壳程序bla.sh在系统路径($ PATH)中查找一个名称为文件的文件,并将其内容解释为您键入的内容。所有这些操作都是在外壳本身相同的过程中完成的(因此可能会影响外壳的内部状态)。

当然,这仅在bla.sh包含用于bash外壳程序的命令时有效(如果您当前正在使用该命令),则不适用于perl脚本或其他任何命令。

(这是在解释help .help source也。)


由于../是完全不同的事物(命令与路径的一部分),因此可以将它们组合在一起-使用. ./bla.sh可以“获取”bla.sh当前目录中的文件


通常最好使用该./bla.sh方法。~/.bashrc~/.profile并且此类文件通常是源文件,因为它们应该修改当前环境。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章