正如标题所说,我希望能够从子进程(通常是脚本)更改父进程(特别是 shell)中的环境变量。从/dev/pts/id试图key=value从子脚本导出的伪终端,如果可能的话,导出的变量必须以某种方式传递给父脚本?
echoingcmd > /proc/$$/fd/0不执行cmd,只在 shell 终端模拟器中查看命令,当然在 subshell 中使用$(cmd)而不是cmd执行,并且export不向父进程添加变量。
我更喜欢所有的工作都在孩子这边完成。
我在评论中被问到,我想要实现什么?这是一个普遍的问题,我正在尝试使用肯定的答案从(父)shell 执行(生成)的脚本中传递变量,以便用户可以从添加的变量中受益,而无需任何进一步的工作。比如我想用脚本安装一个应用程序,应用程序目录应该添加到父shell路径中。
我在理解以下示例中的变量 {_,0} 时遇到困难。
在脚本中tmp.sh:
func()
{
echo $_
echo $0
echo $1
}
Run Code Online (Sandbox Code Playgroud)
使用参数 x 调用 tmp.sh:
~$ ./tmp.sh x
./tmp.sh
./tmp.sh
x
Run Code Online (Sandbox Code Playgroud)
并使用参数 x 获取 tmp.sh:
~$ . ./tmp.sh x
x
bash
x
Run Code Online (Sandbox Code Playgroud)
据我了解$_和$0,后者用于第一个参数,如第一个示例中所示./tmp.sh。为什么它相当于第二个例子中的bash?
扩展为什么.,前者,我不确定,返回带有源 bash 的最后一个参数,相当于无源 bash 中的 $0 。是这样吗?