我正在尝试通过myDeploy.sh导出变量,但未设置导出。当我回声时,它不是在回声。但是,当我在命令上显式设置变量时,它也会正确设置并回显。以下是我的代码段。
myDeploy.sh
#!/bin/bash # export the build root export BUILD_ROOT=/tibco/data/GRISSOM2 export CUSTOM1=/tibco/data/GRISSOM2/DEPLOYMENT_ARTIFACTS/common/MDR_ITEM_E1/rulebase export CLEANUP=$BUILD_ROOT/DEPLOYMENT_ARTIFACTS/common cd $BUILD_ROOT/DEPLOYMENT_ARTIFACTS/common
当我回声时echo $BUILD_ROOT,并不是在为我回声。但是当我在命令提示符下明确执行它时
echo $BUILD_ROOT
[root@krog3-rhel5-64 GRISSOM2]# export BUILD_ROOT=/tibco/data/GRISSOM2
它设置正确并且也回显。我想念什么?
像这样运行脚本
. ./script
要么
source script
会在当前shell上下文中执行脚本(不创建子shell),并且脚本中设置的环境变量将在 当前 shell中可用。
从手册中:
。 文件名 [ 参数 ] 从当前Shell上下文中的 filename 参数读取和执行命令。如果 filename 不包含斜杠,则该PATH变量用于查找文件名。当Bash不在POSIX模式下时,如果在中找不到文件名,则搜索当前目录$PATH。如果提供了任何参数,则在执行 文件名 时它们将成为位置参数 。否则,位置参数将保持不变。返回状态是最后执行的命令的退出状态;如果未执行任何命令,则返回零。如果找不到 文件名 或无法读取 文件名 ,则返回状态为非零。此内建等效于source。
。 文件名 [ 参数 ]
从当前Shell上下文中的 filename 参数读取和执行命令。如果 filename 不包含斜杠,则该PATH变量用于查找文件名。当Bash不在POSIX模式下时,如果在中找不到文件名,则搜索当前目录$PATH。如果提供了任何参数,则在执行 文件名 时它们将成为位置参数 。否则,位置参数将保持不变。返回状态是最后执行的命令的退出状态;如果未执行任何命令,则返回零。如果找不到 文件名 或无法读取 文件名 ,则返回状态为非零。此内建等效于source。
PATH
POSIX
$PATH
source