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?Anda berada di jalur yang benar dengan:
... tetapi Anda melewatkan opsi untuk sh . Mempertimbangkan:
Dan karena Anda mungkin memerlukan akses root untuk menjalankan apt-get, pertimbangkan:
sumber
Anda dapat melakukan sesuatu seperti ini:
!! 2>&1 | tail -n 1 > /tmp/cmd; bash /tmp/cmd; rm /tmp/cmd
Program interaktif tampaknya tidak berfungsi dengan baik dengan pemipaan karena mengharapkan input, 'Y' dalam kasus ini, tetapi deskriptor file stdin ditutup segera setelah perintah pertama selesai.
sumber
Anda dapat menggunakan variabel,
eval
dan memerintahkan substitusi yang saya percayai (meskipun saya tidak yakin seberapa aman semua ini):Saya bersedia terbukti salah dengan hal di atas. Saya menguji ini pada mesin Red Hat dengan
echo
perintah daripada menyarankan penyelesaian bash otomatis tetapi prinsipnya harus sama.Pada akhirnya, akan lebih cepat untuk hanya mengetik aptitude install git ...
sumber