我正在编写一个简单的脚本,它可以帮助我方便地更改系统周围的目录。在Python中更改调用者的当前工作目录
的实现细节并不重要,但是我们要说最好我将会把这个脚本在/usr/bin
与参数表示调用它,我想去系统:goto project1
我期望该脚本退出时,我的终端的当前工作会改变该项目1.
。为了做到这一点,我想:
os.chdir('/')
subprocess.call('cd /', shell=True)
无论其工作。第一个在Python中更改工作目录,第二个在/
生成一个shell。
然后我意识到我是如何天真的。当一个程序运行时,终端只是在从程序写入的stdout读取过程中分叉进程。不管它做什么,它都不会影响终端的状态。
但后来我想“我已经使用cd
多年了,当然有人为此写了代码”,认为可能会有某些事情要做(系统调用或其他?)。
但是cd
甚至不是coreutils。反而,cd
来源是这样的:
builtin `echo ${0##*/} | tr \[:upper:] \[:lower:]` ${1+"[email protected]"}
所以,一对夫妇的问题浮现在脑海中:
- 什么实际发生在当用户调用
cd
幕后? (意思是,终端和系统如何实际交互?) - 是否有可能像Python脚本那样改变终端位置?
非常感谢您的帮助!
“更改调用者的当前工作目录” - 据我所知,这根本不可能。即使他们要求你也不能使用另一个进程的工作目录。 – user2357112
我想这可能是答案。 为什么'bash'允许这个呢?如果我运行用'bash'编写的脚本来做到这一点,我会(显然)能够改变它。 –
不!尝试一下。 'echo'cd /'> cd.sh; 。/ cd.sh',你会发现你的工作目录没有改变。 – user2357112