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


10

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

私が可能にしたいのは:

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

許容できるスクリプトを使用したソリューションがある場合。


あなたの主な目標は何ですか?最後のコマンドにオプションを追加しますか?
Sergiy Kolodyazhnyy 16

私の目標は、頻繁に使用する長いコマンドをすばやく入力することではありません。その中央には長い文字列があり、これは前のコマンドであることが多い
Ludwig Magnusson '19

それはfc長いコマンドを編集する最も簡単な方法であるため、テキストエディターを開くコマンドだけが必要なようです。投稿に追加しましょう。また、コマンドの例を提供できますか?
Sergiy Kolodyazhnyy 16

私の投稿に編集を追加しました
セルギーコロディアズニー

回答:


11

最後に実行されたコマンドをリストするコマンドは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、保存、終了して実行できます。


9

使えない!!けど...

マニュアルから:

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


これにより、最後のコマンドの先頭に何かを追加できるようになります。その真ん中はどうですか?
Ludwig Magnusson

8

(すでに述べた)の!!代わりに履歴拡張構文の使用を主張する場合fcは、方法があります。

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

スクリプトで履歴の拡張を有効にするには、まず関連するシェルオプションを有効にします。

set -o history 
set -o histexpand

set -o histexpandと書くこともできますset -H

これで、履歴拡張操作!!がスクリプト内で機能するようになります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.