替换 sh 中的源

Posted

技术标签:

【中文标题】替换 sh 中的源【英文标题】:Replacement for source in sh 【发布时间】:2011-06-11 13:23:48 【问题描述】:

我需要设置环境变量,通常我们这样做

source script.sh

但是现在,我在引导过程中将其自动化,它看起来像默认情况下使用sh shell 引导的根。如何在 sh 中获取此脚本?

【问题讨论】:

【参考方案1】:

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

点 (.) 命令存在于 bashsh 中。此外,bash 将其别名为source。来自bash手册:

https://www.gnu.org/software/bash/manual/html_node/Bash-Builtins.html#index-source

来源

source filename

. 的同义词(请参阅 Bourne Shell 内置函数)。

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 指定的搜索路径来查找包含文件的目录。然而,与普通命令搜索不同的是,点实用程序搜索的文件不需要是可执行文件。

【讨论】:

【参考方案2】:

点命令“.”等效于 C Shell(和 Bash)source 命令。它由 POSIX 指定(参见 dot),并由 Bourne 和 Korn shell(我相信还有 zsh)支持。

. somefile

请注意,shell 使用$PATH 查找文件,但文件必须是可读的,而不是可执行的。

如下面的 cmets 中所述,您当然可以为文件指定相对或绝对路径名 - 使用 $PATH 将不会搜索任何包含斜杠的名称。所以:

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

如果somefile 存在于三个不同的指定位置,都可以用来查找它(如果您可以将. 替换为ls -l 并查看列出的文件)。

全世界的书呆子联合起来!是的,如果当前目录是根目录,那么 /some/where/somefile./some/where/somefile 将引用同一个文件 - 具有相同的真实路径 - 即使没有链接,符号或硬链接,发挥作用(../../some/where/somefile )。

【讨论】:

以上是关于替换 sh 中的源的主要内容,如果未能解决你的问题,请参考以下文章

在Eclipse中,如何从使用它的项目源中快速访问“android库项目”的源?

visio studio删除空行

如果名称已经在图像下的源中,我应该在 <img> 的替代文本中重复人名吗?

如何正确命名包含返回从此类中设置的源中选择的值并以相同方式设置源值的属性的类?

一文彻底解决Ubuntu上PHP的安装以及版本切换

C#- JSON 转义 \n 字符到 \\n 字符