command_not_found_handle()
เมื่อคุณพิมพ์คำสั่งที่ไม่ได้อยู่ในระบบของคุณทุบตีทำงานฟังก์ชั่น ในฟังก์ชั่นนี้มีการเรียก/usr/lib/command-not-found
สคริปต์ที่พิมพ์ข้อความ
Ubuntu 12.04
การเดาครั้งแรกของฉันเพื่อเปลี่ยนแหล่งที่มาของสคริปต์นี้เพื่อพิมพ์ข้อความstdout
แทนstderr
แต่เมื่อฉันอ่านแหล่งที่มาของสคริปต์ฉันพบว่าคุณสามารถกำหนดค่าให้เพียงแค่ถามคุณว่าคุณต้องการติดตั้งแพคเกจที่ขาดหายไปหรือไม่
หากคุณส่งออกตัวแปรCOMMAND_NOT_FOUND_INSTALL_PROMPT
คุณจะถูกขอให้ติดตั้งแพ็คเกจที่ขาดหายไป:
pbm@ubuntu:~$ git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git
pbm@ubuntu:~$ export COMMAND_NOT_FOUND_INSTALL_PROMPT=""
pbm@ubuntu:~$ git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git
Do you want to install it? (N/y)y
sudo apt-get install git
[sudo] password for pbm:
Ubuntu รุ่นเก่ากว่า
น่าเสียดายที่ไม่มีCOMMAND_NOT_FOUND_INSTALL_PROMPT
ดังนั้นฉันสามารถหาตัวเลือกอื่น ๆ ไม่กี่:
1) ติดตั้งแพคเกจจาก 12.04 - ไม่ควรเป็นปัญหา - เป็นสคริปต์เพียงไม่กี่ตัวใน Python ดังนั้นจึงควรใช้งานได้ (ยังไม่ทดลอง!)
2) การเปลี่ยนแปลงไปstderr
stdout
เมื่อต้องการแก้ไขไฟล์/usr/lib/python2.7/dist-packages/CommandNotFound/CommandNotFound.py
และเปลี่ยนstderr
เป็นstdout
ในบรรทัด 237 และ 240
หลังจากนั้นคุณสามารถใช้วิธีนี้:
pbm@ubuntu:~$ git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git
pbm@ubuntu:~$ `git`
//Installation begins
หากคุณเพิ่ม-y
ตัวเลือกในapt-get
คำสั่งในบรรทัด 237 และ 240 คุณสามารถใช้ไวยากรณ์!! | sh
ได้เช่นกัน
3) คุณสามารถแก้ไขสคริปต์นี้จากบรรทัด 242 ด้วยวิธีนี้:
print >> sys.stderr, _("You can install it by typing:")
f = open("%s/.install-missing" % os.path.expanduser('~'),'w')
print >> sys.stderr, "sudo apt-get install %s" % packages[0][0]
print >> f, "sudo apt-get install %s" % packages[0][0]
f.close()
ด้วยวิธีนี้คุณจะได้รับคำสั่งในไฟล์~/.install-missing
ดังนั้นคุณอาจสร้างนามแฝง:
alias im="chmod +x ~/.install-missing; ~/.install-missing"
ถ้าคุณโทรหาim
แพ็คเกจจะถูกติดตั้ง
/usr/lib/command-not-found
แต่ไม่มีการอ้างอิงถึงCOMMAND_NOT_FOUND_INSTALL_PROMPT
- ความคิด?