替换 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
中找到。
点 (.
) 命令存在于 bash
和 sh
中。此外,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库项目”的源?
如果名称已经在图像下的源中,我应该在 <img> 的替代文本中重复人名吗?