システムに存在しないコマンドを入力すると、bashはfunctionを実行します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を編集して237行目と240行目をに変更stderrしますstdout。
その後、次のように使用できます。
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
237行目と240行目のコマンドに-yオプションを追加する場合は、apt-get構文も使用できます!! | 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()
このようにして、コマンドをfileに取得する~/.install-missingため、エイリアスを作成できます。
alias im="chmod +x ~/.install-missing; ~/.install-missing"
呼び出すとimパッケージがインストールされます。
/usr/lib/command-not-foundが、参照はありませんCOMMAND_NOT_FOUND_INSTALL_PROMPT-考えですか?