Ketika Anda mengetik perintah yang tidak ada di sistem Anda menjalankan fungsi bash command_not_found_handle()
. Dalam fungsi ini ada panggilan ke /usr/lib/command-not-found
skrip yang mencetak pesan.
Ubuntu 12.04
Dugaan pertama saya ke sumber perubahan script ini untuk mencetak pesan ke stdout
gantinya stderr
, tapi ketika saya membaca sumber naskah saya menemukan bahwa Anda bisa mengkonfigurasinya untuk hanya meminta Anda jika Anda ingin menginstal paket hilang.
Jika Anda mengekspor variabel, COMMAND_NOT_FOUND_INSTALL_PROMPT
Anda akan diminta untuk menginstal paket yang hilang:
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:
Versi Ubuntu yang lebih lama
Sayangnya tidak ada COMMAND_NOT_FOUND_INSTALL_PROMPT
sehingga saya dapat menemukan beberapa opsi lain:
1) Instal paket dari 12.04 - seharusnya tidak menjadi masalah - hanya beberapa skrip di Python yang seharusnya bekerja (belum diuji!).
2) Ubah stderr
ke stdout
. Untuk melakukannya edit file /usr/lib/python2.7/dist-packages/CommandNotFound/CommandNotFound.py
dan ubah stderr
ke stdout
dalam baris 237 dan 240.
Setelah itu Anda bisa menggunakannya dengan cara ini:
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
Jika Anda menambahkan -y
opsi ke apt-get
perintah di baris 237 dan 240 Anda juga bisa menggunakan sintaks !! | sh
.
3) Anda juga dapat memodifikasi skrip ini dari baris 242 dengan cara ini:
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()
Dengan cara ini Anda akan mendapatkan perintah dalam file ~/.install-missing
, sehingga Anda dapat membuat alias:
alias im="chmod +x ~/.install-missing; ~/.install-missing"
Jika Anda memanggil im
paket akan diinstal.
/usr/lib/command-not-found
tetapi tidak memiliki referensi keCOMMAND_NOT_FOUND_INSTALL_PROMPT
- pikiran?