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- ความคิด?