ฉันต้องการโปรแกรมไพ ธ อนของฉัน cd
ลงในไดเรกทอรีผ่านเทอร์มินัลเป็นกระบวนการหลัก มีวิธีการทำเช่นนี้?
ฉันหวังว่าจะมีอะไรเช่นนี้:
$ ./cd.py Desktop/scripts
$ pwd
/home/mfto/Desktop/scripts
ขอบคุณล่วงหน้า!
ฉันต้องการโปรแกรมไพ ธ อนของฉัน cd
ลงในไดเรกทอรีผ่านเทอร์มินัลเป็นกระบวนการหลัก มีวิธีการทำเช่นนี้?
ฉันหวังว่าจะมีอะไรเช่นนี้:
$ ./cd.py Desktop/scripts
$ pwd
/home/mfto/Desktop/scripts
ขอบคุณล่วงหน้า!
คำตอบ:
ไม่การเปลี่ยนแปลงไดเรกทอรีทำงานอาจส่งผลกระทบต่อกระบวนการปัจจุบันเท่านั้น (และลูก ๆ ในอนาคต)
สิ่งนี้เป็นไปไม่ได้และคุณจะพบว่า 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
$CDPATH
?