web-dev-qa-db-ja.com

Bash、現在のコマンドの最後に使用された引数を挿入します

前のコマンドの最後の引数を!$で呼び出したり、前の引数をALT + .で循環したりできることは知っていますが、現在使用されているコマンドに使用されている最後の引数を思い出せますか?

例えば、

root@chip:/# echo peckahs
root@chip:/# *_stuffthatdoesntmatter_*
root@chip:/# *_stuffthatdoesntmatter_*
root@chip:/# *_stuffthatdoesntmatter_*
root@chip:/# echo peckahs < used key shortcut to recall 'peckahs' the last used argument for echo
4
regularjoe

Bashを使用すると、次のように、求めていることをほぼ実行できます。

echo !echo:$

だからあなたがするとき

echo This is fun
ls
echo !echo:$

最後の行はfunを出力します。 * の代わりに $一致するコマンドへのすべての引数を生成します。そう

echo This is fun
ls
echo !echo:*

出力This is fun再び;しかし、あなたはただするほうがよいでしょう

!echo

この場合。

これは、同じコマンドでコマンドの引数を繰り返すことに限定されません。

printf !echo:*

詳細については、 bashリファレンスマニュアル を参照してください。これをhistverify Shellオプションと組み合わせて、実行前にコマンドをチェックする機会を与えることもできます。これにより、キーボード操作の履歴ベースの完了に近づくことができます。

履歴拡張はどこでも使用できます。だから例えば

lastechoargs="!echo:*"

最後のechoコマンドへのすべての引数をlastechoargs変数に格納しました。

これは完全なコマンドでも機能します。たとえば、複雑なgitコマンドを作成し、それをファイルに保存したいとします。

echo !git > mygitcommand

または、いくつかのディレクトリをアーカイブしたいが、最初にいくつかのファイルを削除することにしました。

ls dir1 dir2
rm dir2/somefile
tar cpzf archive.tar.gz !ls:*
3
Stephen Kitt

Emacsモードでbashを使用できる場合は、 Ctrl+w (最後の単語を削除)次に Ctrl+u (削除された文字列を入力)

0
Costas

はい。どのPOSIXシェルでも実行できます...

set -o vi
^[[num]-#^[[num]_

...ここで、^[ESCキーを表し、[num]は現在のコマンドから逆方向にカウントするnthhistoryコマンドおよびnthのオプションのパラメーターを表します。前のコマンドの引数は、それぞれ最後から逆方向にカウントします。キーボードの設定によっては、代わりにCTRLと組み合わせキーを使用できる場合があります。

このシーケンスは、番号付きコマンドを呼び出し、それに#コメントを付加して、最後のコマンドとしてシェル履歴に保存します。次に、^[_ショートカットは、最後のコマンドの最後の引数を呼び出します。

bashは、デフォルトで最後の引数をシェルパラメータ$_にも保存するため、最初の部分を実行した後、最後の引数をそのように展開することもできます。

0
mikeserv