時には新しい(Ubuntu)ボックスで開発中ですが、次のように入力すると警告がgit
表示されます。
The program 'git' is currently not installed. You can install it by typing:
apt-get install git-core
このような場合は、次のようにして最後の行を取得できることを知っています。
!! 2>&1 | tail -n 1
apt-get install git-core
しかし、()の結果を最も簡単に実行する方法は何ですか?
私ができることに気づいた
`!! 2>&1 | tail -n 1`
しかし、実際に出力をパイプして実行する方法もありますか?これはうまくいかないようです:
!! 2>&1 | tail -n 1 | sh
そして、この2>&1
部分が少し面倒ですが、もっと簡単にする方法がないかと思います。
編集する
どういうわけか変数に保存し、その変数で実行することも許可されます。
!! 2>&1 | tail -n 1 | (store as $mycmd)
$mycmd
stdout
しかし、少なくともコマンドの右側に変数をパイプする方法があるかどうかはわかりません。
ベストアンサー1
bashは、システムに存在しないコマンドを入力すると機能を実行しますcommand_not_found_handle()
。この関数は/usr/lib/command-not-found
メッセージを印刷するスクリプトを呼び出します。
Ubuntu12.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
。これを行うには、ファイルを編集して237行と240行に/usr/lib/python2.7/dist-packages/CommandNotFound/CommandNotFound.py
変更します。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()
~/.install-missing
これにより、エイリアスを作成できるようにファイルにコマンドが表示されます。
alias im="chmod +x ~/.install-missing; ~/.install-missing"
パッケージを呼び出すとインストールされim
ます。