【发布时间】:2014-10-22 15:13:38
【问题描述】:
如果我有一个用bash(比如python)以外的语言编写的程序,我如何更改环境变量或其中的当前工作目录,以便它反映在调用shell中?
我想用它来编写一个简化常见操作的“命令行助手”。例如,智能cd。当我在提示符中简单地输入一个目录的名称时,它应该是cd。
[~/]$ Downloads
[~/Downloads]$
甚至
[~/]$ project5
[~/projects/project5]$
然后我找到了How to change current working directory inside command_not_found_handle(这正是我想做的事情之一),它把我介绍给了shopt -s autocd。但是,这仍然无法处理提供的目录不在./ 中的情况。
此外,如果我想做一些事情,比如从 python 脚本设置 http_proxy 变量,甚至更新 PATH 变量,我有什么选择?
P。 S. 我知道可能没有一种明显的方法可以在 python 脚本中编写一个神奇的命令来自动更新调用 shell 中的环境变量。我正在寻找一个可行的解决方案,不一定是优雅的。
【问题讨论】:
-
以下是常规解决问题的方法:设置
PS1=[\w]将适用于目录并将export http_proxy=http://foo.example.com:8080/添加到/etc/profile.d/foo.sh。 -
我已经编辑了你的标题和标签:不同语言的子进程严格来说不是子shell——子shell是你从没有执行程序的fork中得到的,而进入Python解释器不仅需要一个 fork,还需要一个
exec调用。 -
@BrianCain,设置
PS1不是我想做的。我想cd进入那个目录。此外,profile.d解决方案:1) 需要 root 访问权限才能即时执行,2) 仅在新的应启动时运行。 -
@CharlesDuffy,很公平。但是,我不想指定 python。将重新编辑。
-
哦,我明白了。
CDPATH非常接近此功能。不过,您仍然需要输入cd project5。