在 sh 中替换源代码

我需要设置环境变量,通常我们通过

source script.sh

但是现在,我在引导过程中将它自动化,它看起来像是默认情况下使用 sh shell 的 root 引导。如何在 sh中找到这个脚本的源代码?

50652 次浏览

Dot 命令‘ .’等效于 C Shell (和 Bash) source命令。它由 POSIX 指定(请参阅 dot) ,并得到 Bourne 和 Korn shell (以及 zsh,我相信)的支持。

. somefile

注意,shell 使用 $PATH查找文件,但是文件只需要是可读的,而不是可执行的。

如下面的注释所示,您当然可以为文件指定一个相对或绝对路径名ーー使用 $PATH不会搜索包含斜杠的任何名称。所以:

. /some/where/somefile
. some/where/somefile
. ./somefile

如果 somefile存在于三个不同的指定位置(如果您可以用 ls -l替换 .并查看列出的文件) ,则可以使用所有这些方法查找 somefile

全世界的学究联合起来!是的,如果工作目录是根目录,那么 /some/where/somefile./some/where/somefile将引用相同的文件ーー具有相同的实际路径ーー即使没有链接(无论是符号链接还是硬链接) ,它们也会发挥作用(../../some/where/somefile也是如此)。

对于 sh(相对于 bash) ,参数必须包含一个斜杠: source ./script.sh,而不仅仅是 source script.sh。除非 script.sh可以在 PATH中找到。

点(.)命令同时存在于 bashsh中。此外,bash将其别名为 source:

Https://www.gnu.org/software/bash/manual/html_node/bash-builtins.html#index-source

来源

source filename

.的同义词(参见 Bourne Shell Builtins)。

Https://www.gnu.org/software/bash/manual/html_node/bourne-shell-builtins.html#index-_002e

。(一段时间)

. filename [arguments]

在当前 shell 上下文中读取和执行来自 filename参数的命令。如果 filename不包含斜杠,则使用 PATH变量查找文件名。当 Bash 不处于 POSIX 模式时,如果在 $PATH中没有找到 filename,就会搜索该工作目录。

来自 POSIX:

如果 file不包含 /,shell 将使用 PATH指定的搜索路径来查找包含文件的目录。但是,与普通命令搜索不同,dot 实用程序搜索的文件不需要是可执行的。