无法设置从配置文件中的行提供的 bash 环境路径
Unable to set bash environment path fed from lines in a config file
我正在尝试使用像这样的简单配置文件来设置 PERL5LIB 的路径:
cat /Users/me/.local/bash.d/perl5lib_dirs | while read line
do
case ":$PERL5LIB:" in
*:$line:*) :;;
*) echo 'Adding path: '$line; PERL5LIB="$line:";;
esac
done
显然,由于循环是在子 shell 中打开的,因此当循环退出时,PERL5LIB 变量的值会丢失。
那么我还能怎样完成呢?
重写循环以使用输入 redirection 从文件中读取(从而避免子 shell):
while read line; do
case ":$PERL5LIB:" in
*:$line:*) :;;
*) echo 'Adding path: '$line; PERL5LIB="$line:";;
esac
done < /Users/me/.local/bash.d/perl5lib_dirs
而不是 运行 游戏尝试获取文件。
例如
abc.sh
abc=123
sh abc.sh
echo $abc
source abc.sh
echo $abc
123
我正在尝试使用像这样的简单配置文件来设置 PERL5LIB 的路径:
cat /Users/me/.local/bash.d/perl5lib_dirs | while read line
do
case ":$PERL5LIB:" in
*:$line:*) :;;
*) echo 'Adding path: '$line; PERL5LIB="$line:";;
esac
done
显然,由于循环是在子 shell 中打开的,因此当循环退出时,PERL5LIB 变量的值会丢失。
那么我还能怎样完成呢?
重写循环以使用输入 redirection 从文件中读取(从而避免子 shell):
while read line; do
case ":$PERL5LIB:" in
*:$line:*) :;;
*) echo 'Adding path: '$line; PERL5LIB="$line:";;
esac
done < /Users/me/.local/bash.d/perl5lib_dirs
而不是 运行 游戏尝试获取文件。
例如 abc.sh
abc=123
sh abc.sh
echo $abc
source abc.sh
echo $abc
123