bash 脚本中的源文件
Posted
技术标签:
【中文标题】bash 脚本中的源文件【英文标题】:Source files in a bash script 【发布时间】:2013-04-07 08:02:37 【问题描述】:我正在使用相邻的两个版本的 ROS。要使用一个,我必须为特定版本获取一些环境变量。我想创建一个执行此操作的脚本。 但是如果我创建一个像下面这样的脚本没有设置变量,它们可能设置在一个子shell中。如何将文件源到主终端外壳?
source.sh:
source /opt/ros/fuerte/setup.bash;
source ~/fuerte_workspace/setup.bash;
这是我调用 source.sh 的方式:
./source.sh
# This does not echo anything, but I expect it should
echo $ros_config
更新:通过按照答案中的建议采购 source.sh,我现在可以看到正在设置的变量。
source ./source.sh
# This works now
echo $ros_config
【问题讨论】:
采购source.sh
怎么样?这可以帮助你:***.com/a/15968190/1983854
【参考方案1】:
使用 . ./(点空间点斜线)
在使用“dot space dot slash”
执行shell脚本时,如下图所示,它将在当前shell中执行脚本,而不会派生子shell。
$ . ./setup.bash
也就是说,这会在当前shell中执行setup.bash
中指定的命令,并为你准备好环境。
【讨论】:
.
是source
的别名,以空格分隔(与所有 bash 命令一样)。如果您使用source
,您将避免与使用.
表示当前目录等相关的常见错误。
注意:source
是 .
的别名,而不是相反。
这适用于当前目录中的脚本 - 但是如果脚本位于 /usr/local/bin 中,你会怎么做?这样更方便,因为您不必 cd 到脚本所在的目录。【参考方案2】:
在当前 shell 的脚本文件中使用点表示法,即不创建子shell:
. /opt/ros/fuerte/setup.bash
. ~/fuerte_workspace/setup.bash
【讨论】:
如果我使用 ./source.sh 它不起作用。 source source.sh 确实有效! 因为您在此处提供 setup.sh 的完整路径,因此不需要./
,因为 ./
表示当前目录。
"./source.sh
" 执行脚本(在它自己的 shell 中)。 “. ./source.sh
”(或“source ./source.sh
”或“source source.sh
”)会将脚本内容应用到当前的 shell 环境。以上是关于bash 脚本中的源文件的主要内容,如果未能解决你的问题,请参考以下文章