
BASH には非常に便利なパラメータ/変数拡張機能がありますが、履歴には表示されません。履歴と BASH 自体のマニュアル ページを確認しました。そこにはありませんでした... 見逃したのかもしれません。
例: 私は ssh を頻繁に使用しており、変数拡張を使用してこれを実行できます。
[email protected]
ユーザー名を削除するのではなく、ホストだけを抽出したいとします。
hostonly=${host##*@}
もし私が
echo $hostonly
次のような結果になります:
bar.org
私の質問: コマンドライン履歴でこれを行うことは可能ですか?
例えば。、
コマンド1:
ssh [email protected]
コマンド2:
ssh gary@!!:##*@
もちろん、これは機能しませんが、このタイプのパターン マッチングが利用可能かどうかを確認できる人はいますか?
ありがとう!
ブブノフ
答え1
人々がよく見逃す巧妙なトリックは、 コマンドですr
(それ自体が コマンドの特殊なケースですfc
)。
$ ssh [email protected]
(...)
$ r foo=baz
より一般的なケースは
$ fc -s foo=bar ssh
を使用すると、履歴から部分文字列でコマンドを選択し、指定された置換を実行して実行できます。 を省略すると、-s
コマンドが に読み込まれ、$EDITOR
より複雑な変更が行われます。コマンド ライン編集ではほとんどの場合これが不要になりますが、コマンド ラインで行うのが難しい編集もあります。
履歴参照構文を使用してかなり複雑な操作を行うこともできます!
が、歴史的な理由(基本的な履歴メカニズムは初期に確立されcsh
、すべての拡張機能で互換性が維持されている)により、異なる構文が使用されます。ここ詳細については。
答え2
$ ssh [email protected]
...
$ ^foo^gary^
...
コマンドは、ユーザー名として「foo」の代わりに「gary」を使用して繰り返されます。以下は同じように動作します:
$ ssh [email protected]
...
$ !!:s/foo/gary/
...