有人可以在下面的两个示例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.sh
是bash
脚本,一个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] 删除。
我来说两句