bash脚本中的源文件

use*_*041 48 bash shell ubuntu

我使用两个版本的ROS彼此相邻.要使用一个,我必须为特定版本获取一些环境变量.我想创建一个执行此操作的脚本.但是,如果我创建一个类似下面的脚本,则未设置变量,它们可能设置在子shell中.如何将文件源到主终端shell?

source.sh:

source /opt/ros/fuerte/setup.bash;
source  ~/fuerte_workspace/setup.bash;
Run Code Online (Sandbox Code Playgroud)

这是我如何调用source.sh:

./source.sh
# This does not echo anything, but I expect it should
echo $ros_config
Run Code Online (Sandbox Code Playgroud)

更新:通过采购答案中建议的source.sh,我现在可以看到正在设置的变量.

source ./source.sh
# This works now
echo $ros_config
Run Code Online (Sandbox Code Playgroud)

Man*_*dar 83

使用执行Shell脚本../(点空间点斜线)

在使用执行shell脚本时“dot space dot slash”,如下所示,它将在当前shell中执行脚本而不会分支子shell.

$ . ./setup.bash
Run Code Online (Sandbox Code Playgroud)

换句话说,这将执行setup.bash当前shell中指定的命令,并为您准备环境.

  • 注意:`source` 是`.` 的别名,而不是相反。 (6认同)
  • `.` 是 `source` 的别名,以空格分隔(就像所有 bash 命令一样)。如果您使用 `source`,您将避免与使用 `.` 表示当前目录等相关的常见错误。 (3认同)

anu*_*ava 6

使用点表示法来源当前 shell 中的脚本文件,即不创建子shell:

. /opt/ros/fuerte/setup.bash
. ~/fuerte_workspace/setup.bash
Run Code Online (Sandbox Code Playgroud)

  • "`./ source.sh`"执行脚本(在自己的shell中)."`/ source.sh`"(或"`source./ source.sh`"或"`source source.sh`")将脚本内容应用于当前的shell环境. (2认同)