在sh中替换源


71

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

source script.sh

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


我不知道您需要用什么方式“替换”源,因为听起来您是在请求源。
sorpigal 2011年

2
我的意思是在“ sh” shell中替换源命令。简而言之,来源:bash :: ?? :sh
vkris 2011年

Answers:


99

点命令' .'与C Shell(和Bash)source命令等效。它由POSIX指定(请参阅参考资料dot),并由Bourne和Korn外壳程序(以及zsh,我相信)支持。

. somefile

请注意,外壳程序使用来查找文件$PATH,但是该文件仅必须是可读的,而不是可执行文件。

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

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

都可以用来发现somefile,如果它在三个不同的指定位置存在(如果你能代替.使用ls -l,并看到列出的文件)。

世界的行人团结起来!是的,如果当前目录是根目录,则/some/where/somefile并且./some/where/somefile会引用相同的文件-具有相同的真实路径-即使没有符号连接或硬链接也起着作用(也是如此../../some/where/somefile)。


1
如果我给出整个路径怎么办?喜欢 。/ usr / local / xyz / script?这有效吗?
vkris 2011年

当然,可以使用绝对或相对路径作为文件名。仅当名称中没有斜杠时,才进行PATH查找,就像其他任何脚本一样。
乔纳森·莱夫勒

名称的开头不加斜杠,我敢肯定你的意思。
sorpigal 2011年

2
@Sorpigal:不;如果键入. somewhere/something,则必须有一个子目录,./somewhere其中包含something要找到的命令文件。
乔纳森·莱夫勒


6

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

.中都存在Dot()命令。此外,将其别名为。从手册:bashshbashsourcebash

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]

filename当前Shell上下文中的参数读取并执行命令。如果filename不包含斜杠,则该PATH变量用于查找文件名。当Bash不在POSIX模式下时,如果filename未在中搜索当前目录$PATH

POSIX

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.