我正在編寫一個簡單的腳本,它可以幫助我方便地更改系統周圍的目錄。在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