エラーメッセージの最後の行をコマンドとして実行

エラーメッセージの最後の行をコマンドとして実行

たとえば、インストールされていないパッケージを実行しようとすると、次のようになります。

me ~: gparted 

The program 'gparted' is currently not installed. You can install it by typing:
sudo apt-get install gparted

sudo apt-get install gpartedこの行をコマンドでどのように実行できますか?明らかに入力しません。

ベストアンサー1

これは.bashrc

export COMMAND_NOT_FOUND_INSTALL_PROMPT=1

あなたのため:

$ foo
The program 'foo' is currently not installed. You can install it by typing:
sudo apt-get install blah-blah
Do you want to install it? (N/y)

次のPythonエラーが発生した場合:

...
  File "/usr/lib/python3/dist-packages/CommandNotFound/CommandNotFound.py", line 217, in install_prompt
    answer = answer.decode(sys.stdin.encoding)
AttributeError: 'str' object has no attribute 'decode'

あなたはできます:

適用する今回のパッチUbuntuの場合ここ
または:
215,216,217行の先頭にスペースを4つ追加して修正します。CommandNotFound.py(ノート:いいえ商標):

    ...
    213 その他:
    第214話
    2154 spaces
    2164 spaces
    2174 spaces
    第218話
    ...

別の方法は拡張グレック・ヒュギルコメントは次のとおりです。

$(!! 2>&1 | tail -n1)

スクリプトでラップしようとしましたが、うまくいきませんでした。箱の外エラーメッセージが表示されないためです。

これをスクリプトに入れたい場合、ややハッキング的なアプローチは次のとおりです。

x=$(/usr/lib/command-not-found $(tail -n1 "$HOME/.bash_history") 2>&1 | tail -n1)
echo "$x"

一部のオプションについては、以下を確認してください。

/usr/lib/command-not-found -help

および/またはスクリプト自体を確認してください。

おすすめ記事