我需要设置环境变量,通常我们通过
source script.sh
但是现在,我在引导过程中将其自动化,默认情况下,它看起来像是用sh
shell引导的根。如何从中获取此脚本sh
?
我需要设置环境变量,通常我们通过
source script.sh
但是现在,我在引导过程中将其自动化,默认情况下,它看起来像是用sh
shell引导的根。如何从中获取此脚本sh
?
Answers:
点命令' .
'与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
)。
. somewhere/something
,则必须有一个子目录,./somewhere
其中包含something
要找到的命令文件。
tl; dr使用sh
(相对于bash
)参数必须包含斜杠:source ./script.sh
,而不仅仅是source script.sh
。除非script.sh
可以在中找到PATH
。
和.
中都存在Dot()命令。此外,将其别名为。从手册:bash
sh
bash
source
bash
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
来查找包含文件的目录。但是,与普通命令搜索不同,点实用程序搜索的文件不需要可执行。