最後のbash入力コマンドの印刷(保存)

最後のbash入力コマンドの印刷(保存)

Bashで最後に実行されたコマンドを取得する方法は?わかりました!!:pは最後のコマンドを出力しますが、bashプロンプト以外には使用できないようです。試しましたがecho !!:p印刷されました。

~/ダウンロード$pwd
ダウンロード
~/ダウンロード$エコ!!:p
エコパスワード

これを変数に使用したいPROMPT_COMMANDので、印刷できるように文字列としてインポートする必要があります。見つけることができるショートカットがありますか?私は間違った場所を探していますか?

まだ分​​からないと思います。出力後および次のプロンプトの前に再表示できるように、最後のコマンド実行を保存する必要があります。たとえば、出力が次のようになります。

~/ダウンロード$pwd
ダウンロード

パスワード
~/ダウンロード$

.bashrcファイルのプロンプトを変更しています。

PROMPT_COMMAND='echo -en "\033[38;5;2m"!!:p"\033[0m\n"')
PS1='\W\$'

しかし!! :pはbashプロンプトでのみうまく機能します。それでは、後で再印刷できるように最後のコマンドをどのように保存しますか?

答え1

history組み込みコマンドを使用して、実行したばかりのコマンドラインにアクセスできます。 (history 1実行したばかりのコマンドラインを印刷するのに、なぜfc -nl -1同じコマンドラインを印刷するのかわかりませんfc -nl 0。)

PROMPT_COMMAND='echo -en "\033[38;5;2m"; history 1; echo -en "\033[0m\n"'

コマンドテキストの前に数字が印刷されます。その番号を削除したバージョンです。 (履歴行が99999本より多い場合は正確ではない可能性があります。bashがその数値の形式をどのように指定するのかわかりません。)

prompt_function () {
  local prompt_history="$(history 1)"
  prompt_history=${prompt_history:7}
  echo -En $'\033[38;5;2m'"$prompt_history"$'\033[0m\n'
}
PROMPT_COMMAND=prompt_function

(これはecho -en ..."$prompt_history"...コマンドラインでバックスラッシュを拡張するので、echo -Eシェル拡張を使用して.を使用して$''制御文字を生成するようにしました。)

関連情報