Yanıtlar:
Hayır. Çalışma dizinindeki değişiklikler sadece mevcut süreci (ve gelecekteki çocukları) etkileyebilir.
Bu mümkün değil ve bunu göreceksiniz cd
aslında bir "değil program "normal anlamda - çalıştırılabilir diskte bir dosya değil, bunun yerine" gömme "komut. Yerleşik komutlar, kabuğun kendisi tarafından yorumlanır (örneğin: bash
). Bir listesi için bash
yerleşik komutlar, bkz. " Kabuk Yerleşik Komutları "man sayfasının bölümü (veya help
Yerleşik).
Eğer cd
Kabukta yerleşik olmasaydı, o zaman her seferinde yeni bir işlem yapmadan dizini değiştirmek imkansız olurdu (bu çok karışık olurdu).
Bunun nedeni, geçerli çalışma dizininin (çevre gibi) bir işlemin özelliği olmasıdır. Bu şeyler ebeveynden çocuğa miras edilebilir, ancak olamaz itilmiş "çocuklardan ebeveynlere destek.
Gerçekten bir python betiğinin mevcut çalışma dizinini değiştirmesini ve ardından bir kabuk sunmasını istiyorsanız, bunun gibi bir şey yapmanız gerekir:
cd.py
#!/usr/bin/env python3
import os
os.chdir('/tmp/')
os.system('bash')
$ pwd
/home/attie/
$ echo $$
30665 # the original shell's PID
$ ./cd.py
$ pwd
/tmp
$ echo $$
30464 # the sub-shell's PID... it's parent is python
$ exit
exit
$ pwd
/home/attie/
$ echo $$
30665 # the original shell's PID
$CDPATH
?