web-dev-qa-db-ja.com

使ってもいいですか '!!'エイリアスまたはスクリプトで?

ターミナルでは、以前のコマンドを参照する!!を使用できます。
エイリアスでこれを使用することは可能ですか?試しましたが、二重感嘆符が文字通りに解釈されます。

私が可能にしたいのは:

  1. コマンドを入力します
  2. 手順1で入力した内容を含むエイリアスを入力します

スクリプトを使用した解決策もありますが、これも受け入れられます。

10

最後に実行されたコマンドをリストするコマンドはfc -nl -1です。出力置換を使用して、同じコンテンツにさらにパラメーターを追加できます

$> ls /etc/passwd
/etc/passwd
$> $(fc -nl -1)  /etc/group                                                     
/etc/group  /etc/passwd
$> 

ただし、このアプローチでは引用が問題になる場合があります

fcの非常に便利な機能は、fcコマンドを単独で実行すると、FCEDIT変数で指定されたテキストエディターを開くことです(おそらく~/.bashrcに保存する)行の内容は最後のコマンドになります。簡単にするために、テキストエディターとしてnanoを使用することをお勧めしますが、vimを知っている場合はさらに良いでしょう。

たとえば、qdbus org.ayatana.bamf /org/ayatana/bamf/matcher org.ayatana.bamf.matcher.ActiveWindowの巨大な行を編集する必要がある場合はどうでしょうか?しかし、fcを使用すると、vimを開いて/org/ayatana/bamf/matcherを編集し、保存、終了して実行できます。

11

!!は使用できませんが、...

manual から:

Fcコマンドで使用する便利なエイリアスはr='fc -s'です。したがって、「r cc」と入力すると、ccで始まる最後のコマンドが実行され、「r」と入力すると最後のコマンドが再実行されます。

9
Rinzwind

fc(前述)の代わりに!!履歴展開構文を使用することを主張する場合、方法があります。

デフォルトでは、historyの展開は、非対話型のシェルセッションでは無効になっています。スクリプトで。

スクリプトで履歴展開を有効にするには、最初に関連するシェルオプションを有効にします。

set -o history 
set -o histexpand

set -o histexpandset -Hと書くことができます。

履歴展開操作!!はスクリプト内で機能します。

8
heemayl