cd ในพาเรนต์เชลล์พร้อมสคริปต์ python


0

ฉันต้องการโปรแกรมไพ ธ อนของฉัน cd ลงในไดเรกทอรีผ่านเทอร์มินัลเป็นกระบวนการหลัก มีวิธีการทำเช่นนี้?

ฉันหวังว่าจะมีอะไรเช่นนี้:

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

ขอบคุณล่วงหน้า!


คุณแน่ใจหรือว่าจะไม่เป็นไรด้วย $CDPATH?
Ignacio Vazquez-Abrams

คำตอบ:


1

ไม่การเปลี่ยนแปลงไดเรกทอรีทำงานอาจส่งผลกระทบต่อกระบวนการปัจจุบันเท่านั้น (และลูก ๆ ในอนาคต)


1

สิ่งนี้เป็นไปไม่ได้และคุณจะพบว่า cd ไม่ใช่ " โครงการ "ในความหมายปกติ - ไม่ใช่ไฟล์บนดิสก์ที่สามารถดำเนินการได้แทนที่จะเป็น" ในตัว คำสั่ง "คำสั่งในตัวจะถูกตีความโดยเชลล์เอง (เช่น: bash ) สำหรับรายการของ bash คำสั่งในตัวให้ดู " คำสั่งของ Shell Builtin ส่วน "ของหน้าคน (หรือใช้ help ในตัว)

ถ้า cd ไม่ได้มีอยู่แล้วในเชลล์แล้วมันจะเป็นไปไม่ได้ที่จะเปลี่ยนไดเรกทอรีโดยไม่ใช้กระบวนการใหม่ทุกครั้ง (ซึ่งจะยุ่งมาก)

นี่เป็นเพราะไดเรกทอรีการทำงานปัจจุบัน (เช่นสภาพแวดล้อม) เป็นคุณสมบัติของกระบวนการ สิ่งเหล่านี้สามารถสืบทอดจากผู้ปกครองไปยังเด็ก แต่ไม่สามารถ " ผลักดัน "สำรองจากเด็กถึงผู้ปกครอง

หากคุณต้องการให้สคริปต์ python เปลี่ยนไดเรกทอรีการทำงานปัจจุบันจากนั้นแสดงเชลล์คุณจะต้องทำสิ่งนี้:

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.