python betiği ile üst kabuktaki cd


0

Python programımın çalışmasını istiyorum cd Üst süreç olarak terminal üzerinden bir dizine. Bunu yapmanın bir yolu var mı?

Böyle bir şey umuyordum:

$ ./cd.py Desktop/scripts
$ pwd
/home/mfto/Desktop/scripts

Şimdiden teşekkürler!


Sadece iyi olmayacağına emin misin? $CDPATH?
Ignacio Vazquez-Abrams

Yanıtlar:


1

Hayır. Çalışma dizinindeki değişiklikler sadece mevcut süreci (ve gelecekteki çocukları) etkileyebilir.


1

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')

Kullanımı:

$ 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.