在sh中替换源代码

时间:2011-01-19 05:59:29

标签: bash shell sh

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

来设置
source script.sh

但是现在,我在启动过程中自动执行它,它看起来像默认情况下根目录启动sh shell。如何在sh

中获取此脚本

2 个答案:

答案 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指定的搜索路径来查找包含文件的目录。但是,与普通命令搜索不同,点实用程序搜索的文件不需要可执行。