コマンドラインの尾からテキストを実行する最も簡単な方法は何ですか?

コマンドラインの尾からテキストを実行する最も簡単な方法は何ですか?

時には新しい(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変更します。stderrstdout

その後、次のように使用できます。

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ます。

おすすめ記事