79

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

source script.sh

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

4

2 回答 2

108

点命令 ' .' 等效于 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)。

于 2011-01-19T06:13:46.170 回答
10

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 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不包含 a /,shell 将使用 指定的搜索路径PATH来查找包含文件的目录。然而,与普通命令搜索不同的是,dot 实用程序搜索的文件不必是可执行的。

于 2019-09-23T15:02:06.737 回答