システムに存在しないコマンドを入力すると、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
-考えですか?