假设我export
在终端中有一个变量。之后我调用一个脚本将该变量更改为其他值。但当我返回终端和echo
变量时,它仍保持其原始值。
如果我想让变量改变并在脚本之外可见,而不仅仅是在那里,我该怎么办在脚本。下面是我想说的一个例子:
ares@ares-HP-ProBook-4530s:~$ export package=tree
ares@ares-HP-ProBook-4530s:~$ cat script3.sh
#! /bin/bash
#set -x
echo $package
apt-cache show $1 | head -1
if [ $? -eq 0 ]; then
package=1
else
package=0
fi
echo $package
运行脚本时的输出
ares@ares-HP-ProBook-4530s:~$ ./script3.sh gnome-terminal
tree
Package: gnome-terminal
1
ares@ares-HP-ProBook-4530s:~$ echo $package
tree
ares@ares-HP-ProBook-4530s:~$
答案1
您的 shell 进程拥有父进程环境的副本,但无法访问父进程的环境。当您的 shell 进程终止时,您对其环境所做的任何更改都将丢失。获取脚本文件是配置 shell 环境最常用的方法,您可能只想咬紧牙关,为两种 shell 类型各维护一个脚本文件。
找到了这个答案这里
答案2
源文件.sh
这应该能满足需要。
答案3
另一种可能性是,在 .bashrc 中创建一个函数,然后在当前 shell 中调用该函数;这将节省一些输入。您仍然可以传递变量。
如果我需要更多的灵活性,我就会使用此方法而不是别名。
答案4
新流程获取复制每个导出变量。
您需要执行以下其中一项操作:
- 在同一个进程上执行所有操作(通过在当前 shell 中执行脚本)
- 将值保存在公共位置(sqlite,平面文件)并从每个进程读取/写入