我需要设置环境变量,通常我们通过
来设置source script.sh
但是现在,我在启动过程中自动执行它,它看起来像默认情况下根目录启动sh
shell。如何在sh
?
答案 0 :(得分:78)
点命令“.
”相当于C Shell(和Bash)source
命令。它由POSIX指定(参见dot
),并得到Bourne和Korn shell的支持(我相信zsh
)。
. somefile
请注意,shell使用$PATH
查找文件,但该文件只能是可读的,而不是可执行的。
如下面的评论中所述,您当然可以指定文件的相对或绝对路径名 - 不会使用$PATH
搜索包含斜杠的任何名称。所以:
. /some/where/somefile
. some/where/somefile
. ./somefile
如果它存在于三个不同的指定位置(如果您可以将somefile
替换为.
并查看列出的文件),则可以全部用于查找ls -l
。
世界的学生团结起来!是的,如果当前目录是根目录,那么/some/where/somefile
和./some/where/somefile
将引用相同的文件 - 具有相同的真实路径 - 即使没有链接,符号或硬盘,也起作用(等等)会../../some/where/somefile
)。
答案 1 :(得分:2)
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 Builtins)。
https://www.gnu.org/software/bash/manual/html_node/Bourne-Shell-Builtins.html#index-_002e
。 (一个时期)
. filename [arguments]
在当前shell上下文中从
filename
参数读取并执行命令。如果filename
不包含斜杠,则PATH
变量用于查找文件名。当Bash不在POSIX模式下时,如果在filename
中找不到$PATH
,则会搜索当前目录。
来自POSIX:
如果
file
不包含,则外壳程序应使用PATH
指定的搜索路径来查找包含文件的目录。但是,与普通命令搜索不同,点实用程序搜索的文件不需要可执行。