点(源)命令在脚本中不起作用,但在终端中起作用
Dot (source) command doesn't work in script, but works in terminal
为实验而简化的脚本文件:
#!/bin/sh
if test -f /home/vl/docker-test/envvars; then . /home/vl/docker-test/envvars; fi
envvars 文件内容:
export APACHE_RUN_USER=www-data
运行脚本后没有任何反应,没有输出,没有错误。
检查 env 是否包含来自 envvars 的变量,不,它没有:
$ env | grep -i apache
输出为空。
但是:
$ if test -f /home/vl/docker-test/envvars; then . /home/vl/docker-test/envvars; fi
$ env | grep -i apache
APACHE_RUN_USER=www-data
我的脚本哪里做错了?
.
适用于当前 运行ning 环境。在第一种情况下,这是脚本(脚本完成后消失)。在第二种情况下,它是 shell。如果你想让脚本影响 运行 里面的 shell,那么你需要把它 .
变成 shell,而不是 运行 它作为脚本.
因此,如果您的脚本是 bring-in-vars
,那么您当前正在执行类似的操作(运行将其作为 child):
./bring-in-vars
你需要这样做(将其采购到当前 shell):
. ./bring-in-vars
Children 无法按设计修改其 parents。
为实验而简化的脚本文件:
#!/bin/sh
if test -f /home/vl/docker-test/envvars; then . /home/vl/docker-test/envvars; fi
envvars 文件内容:
export APACHE_RUN_USER=www-data
运行脚本后没有任何反应,没有输出,没有错误。 检查 env 是否包含来自 envvars 的变量,不,它没有:
$ env | grep -i apache
输出为空。
但是:
$ if test -f /home/vl/docker-test/envvars; then . /home/vl/docker-test/envvars; fi
$ env | grep -i apache
APACHE_RUN_USER=www-data
我的脚本哪里做错了?
.
适用于当前 运行ning 环境。在第一种情况下,这是脚本(脚本完成后消失)。在第二种情况下,它是 shell。如果你想让脚本影响 运行 里面的 shell,那么你需要把它 .
变成 shell,而不是 运行 它作为脚本.
因此,如果您的脚本是 bring-in-vars
,那么您当前正在执行类似的操作(运行将其作为 child):
./bring-in-vars
你需要这样做(将其采购到当前 shell):
. ./bring-in-vars
Children 无法按设计修改其 parents。