替换 sh 中的源

发布于 2024-10-12 21:07:40 字数 171 浏览 7 评论 0原文

我需要设置环境变量,通常我们通过以下方式执行此操作

source script.sh

,但现在,我在启动过程中将其自动化,看起来默认情况下 root 使用 sh shell 启动。如何在 sh 中获取此脚本?

I need to set the environment variables, usually we do this by

source script.sh

But now, I am automating it during the boot process and it looks like the root boots by default with sh shell. How do I source this script in sh?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

失而复得 2024-10-19 21:07:40

点命令“.”相当于 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)。

The dot command '.' is the equivalent of the C Shell (and Bash) source command. It is specified by POSIX (see dot), and supported by the Bourne and Korn shells (and zsh, I believe).

. somefile

Note that the shell looks for the file using $PATH, but the file only has to be readable, not executable.

As noted in the comments below, you can of course specify a relative or absolute pathname for the file — any name containing a slash will not be searched for using $PATH. So:

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

could all be used to find somefile if it existed in the three different specified locations (if you could replace . with ls -l and see a file listed).

Pedants of the world unite! Yes, if the current directory is the root directory, then /some/where/somefile and ./some/where/somefile would refer to the same file — with the same real path — even without links, symbolic or hard, playing a role (and so would ../../some/where/somefile).

初懵 2024-10-19 21:07:40

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

点 (.) 命令存在于 bashsh 中。此外,bash 将其别名为 source。来自 bash 手册:

https://www.gnu.org/software/bash/manual/html_node/Bash-Builtins.html#index-source

来源

源文件名

的同义词。(请参阅 Bourne Shell 内置函数)。

https://www.gnu.org /software/bash/manual/html_node/Bourne-Shell-Builtins.html#index-_002e

<强>。 (句号)

<前><代码>。文件名[参数]

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

来自 POSIX

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

tl;dr With sh (as opposed to bash) the argument must contain a slash: source ./script.sh, not just source script.sh. Unless script.sh can be found in PATH.

Dot (.) command exists in both bash and sh. Additionally, bash aliases it as source. From bash manual:

https://www.gnu.org/software/bash/manual/html_node/Bash-Builtins.html#index-source

source

source filename

A synonym for . (see Bourne Shell Builtins).

https://www.gnu.org/software/bash/manual/html_node/Bourne-Shell-Builtins.html#index-_002e

. (a period)

. filename [arguments]

Read and execute commands from the filename argument in the current shell context. If filename does not contain a slash, the PATH variable is used to find filename. When Bash is not in POSIX mode, the current directory is searched if filename is not found in $PATH.

From POSIX:

If file does not contain a /, the shell shall use the search path specified by PATH to find the directory containing file. Unlike normal command search, however, the file searched for by the dot utility need not be executable.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文