bashの履歴コマンドのパラメータ
shellコマンドを実行するときには、前のコマンドのパラメータを使用する必要があります.パラメータが簡単な場合は、繰り返し入力することでニーズを満たすことができます.パラメータが長い場合や、パラメータの数が多い場合は、履歴コマンドのパラメータを再利用すれば、半分の効果が得られます.履歴コマンドのパラメータを取得する3つの方法について説明します.
1、readlineショートカットで実現
Readlineは強力なライブラリであり、bash、ftp、python、zsh、mysqlなどのプログラムのコマンドラインインタフェースはreadlineを使用して実現されています.実際、私たちがよく使うctrl-r(履歴検索コマンド)、ctrl-p(前の履歴コマンド)、ctrl-a(行頭にジャンプ)などのショートカットキーはbashでは実現されず、その背後の功労者はreadlineです.
alt-dot(altキー+.キー)、esc-dotを入力(ESCキー+.キー)、meta-dotは、前のコマンドの最後のパラメータを得ることができます.readlineでは、前のコマンドの他のパラメータを得ることができますが、これらのショートカットキーはリモートログインツールと競合することが多く、TERMタイプを個別に設定する必要があるため、ここでは説明しません.これらのショートカットキーについてはreadline shortcutsとここを参照してください.
2、通过$インプリメンテーション
$_前のコマンドの最後のパラメータが$、$と保存されています.など同様にbashの内蔵変数と考えられる.$_を利用して、ディレクトリにcdを作成して実装するには、次のようにします.
$_履歴コマンドに入ります.historyコマンドを実行すると、前に入力した$が表示されます.この後述するbashの歴史展開には著しい違いがある.
ちなみにpython shellでは前の式の結果を表す意味もあります.
3、bash歴史展開(history expand)により実現
bash履歴展開を使用する場合、!$前のコマンドの最後のパラメータを取得します.bash履歴展開は,どのコマンドを展開するか,そのコマンドのどのパラメータを展開するか,コマンドに対する操作をそれぞれ示すコマンド,パラメータ,オペレータの3つの部分から構成される.コマンド展開が完了してから入る.bash_historyでは、historyコマンドを実行しても履歴展開に使用されるパラメータは表示されません.
このセクションのすべてのコマンドは、現在のbashに次のような履歴があると仮定します.
neoli@ISD32_54_sles10:~/tmp/123$ history 1 2012-09-21 20:54:55 echo 1 2 3 4 5 2 2012-09-21 20:55:08 ls 6 7 8 9 10 3 2012-09-21 20:55:15 echo 11 12 13 14 15 4 2012-09-21 20:55:22 cat 16 17 18 19 20 5 2012-09-21 20:55:27 echo 21 22 23 24 25
1)コマンド部分はbashでEvent Designatorsと呼ばれ、一般的に使われています!歴史の展開を開始します. !nはn番目のコマンドを表します.例えば!2実行ls 6 7 8 9 10 を示す !-nは最後からn番目のコマンドを表します.例えば!-3はecho 11 12 13 14 15 を実行することを示す. !!前のコマンドを表します.-1のショートカット !stringはstringで始まる最近のコマンドを表します.例えば!echo表示echo 21 22 23 24 25 !?string?stringを含む最近のコマンドを表します.例えば!?6?表示cat 16 17 18 19 20 ^string 1^string 2^は、前のコマンドを実行し、最初のstring 1をstring 2に置き換え、string 1が存在しない場合は置き換えに失敗し、コマンドは実行されません. !#現在のコマンドが入力されている部分を示します.echo 1 2などです.echo 1 2 echo 1 2 が実行されます.
2)コマンドから指定されたパラメータを選択するためのパラメータ部分(Word Designators):コマンド部分とパラメータ部分を分割するためのパラメータ部分. !!:0は前のコマンドの0番目のパラメータ、すなわちコマンド自体を表し、echo を得る !2:nは2番目のコマンドのn番目のパラメータを表します.例えば!2:2で得られたのは7 !!:^前のコマンドの1番目のパラメータを表します.と!:1同義、得られたのは21 !!:$前のコマンドの最後のパラメータを表し、さらに!$と略記できます.得られたのは25 !!:x-yはx番目からy番目のパラメータを表し、-yは0-yを意味し、例えば!-2:3-4で得られたのは18 19 !!:*前のコマンドを表すパラメータの部分は、さらに略して!*と書くことができます.如!:*得られたのは21 22 23 24 25 !!:n*と!!:n-$同義 !!:n-意为!!n-$-1、n番目のパラメータから最後から2番目のパラメータまで、例えば!-2:3-得られたのは18 19 bash履歴展開によるディレクトリへの作成とcdの実装方法は、次のとおりです.
そのうち!「mkdir dir&&cd」を表し、最初のパラメータをとるとディレクトリ名が得られます.
3)オペレータ(Modifiers)オプションのパラメータセクションの後に、1つ以上の使用を指定できます:開始オペレータh最後のファイルパス部分を除去し、前のコマンドecho/tmp/123/456/を仮定すると、cd!:1:h:hはcd/tmp/123を意味する.前のコマンドecho/tmp/123/456を仮定すると、cd!:1:h:hはcd/tmp を意味するtすべての開始ファイルパス部分を除去し、前のコマンドがecho/tmp/123/456/であると仮定すると、cd!:1:tはcdを意味する.前のコマンドがecho/tmp/123/456であると仮定すると、cd!:1:tはcd 456 を意味するr接尾辞を除去し、前のコマンドがecho/tmp/bbsであると仮定する.c,則echo!:1:rはecho/tmp/bbs を意味するe接尾辞が得られ、前のコマンドがecho/tmp/bbsであると仮定する.c,則echo!:1:eはechoを意味する.c p printコマンド実行せず [g]s/string 1/sting 2/コマンドのstring 1をstring 2に置き換え、gはグローバル置換を意味し、前のコマンドがecho 1 2 1であると仮定すると!:gs/1/3/はecho 3 2 3を意味する.3.1の^string 1^string 2^は!!:s/string1/string2/ [g]&は、前回の置換を実行することを意味し、gはグローバル置換を意味する.次に、前のコマンドがecho 123451であると仮定すると!:&echo 323451
1、readlineショートカットで実現
Readlineは強力なライブラリであり、bash、ftp、python、zsh、mysqlなどのプログラムのコマンドラインインタフェースはreadlineを使用して実現されています.実際、私たちがよく使うctrl-r(履歴検索コマンド)、ctrl-p(前の履歴コマンド)、ctrl-a(行頭にジャンプ)などのショートカットキーはbashでは実現されず、その背後の功労者はreadlineです.
alt-dot(altキー+.キー)、esc-dotを入力(ESCキー+.キー)、meta-dotは、前のコマンドの最後のパラメータを得ることができます.readlineでは、前のコマンドの他のパラメータを得ることができますが、これらのショートカットキーはリモートログインツールと競合することが多く、TERMタイプを個別に設定する必要があるため、ここでは説明しません.これらのショートカットキーについてはreadline shortcutsとここを参照してください.
2、通过$インプリメンテーション
$_前のコマンドの最後のパラメータが$、$と保存されています.など同様にbashの内蔵変数と考えられる.$_を利用して、ディレクトリにcdを作成して実装するには、次のようにします.
1: makedir dir && cd "$_"
$_履歴コマンドに入ります.historyコマンドを実行すると、前に入力した$が表示されます.この後述するbashの歴史展開には著しい違いがある.
ちなみにpython shellでは前の式の結果を表す意味もあります.
3、bash歴史展開(history expand)により実現
bash履歴展開を使用する場合、!$前のコマンドの最後のパラメータを取得します.bash履歴展開は,どのコマンドを展開するか,そのコマンドのどのパラメータを展開するか,コマンドに対する操作をそれぞれ示すコマンド,パラメータ,オペレータの3つの部分から構成される.コマンド展開が完了してから入る.bash_historyでは、historyコマンドを実行しても履歴展開に使用されるパラメータは表示されません.
このセクションのすべてのコマンドは、現在のbashに次のような履歴があると仮定します.
neoli@ISD32_54_sles10:~/tmp/123$ history 1 2012-09-21 20:54:55 echo 1 2 3 4 5 2 2012-09-21 20:55:08 ls 6 7 8 9 10 3 2012-09-21 20:55:15 echo 11 12 13 14 15 4 2012-09-21 20:55:22 cat 16 17 18 19 20 5 2012-09-21 20:55:27 echo 21 22 23 24 25
1)コマンド部分はbashでEvent Designatorsと呼ばれ、一般的に使われています!歴史の展開を開始します.
2)コマンドから指定されたパラメータを選択するためのパラメータ部分(Word Designators):コマンド部分とパラメータ部分を分割するためのパラメータ部分.
1: mkdir dir && cd !#:1
そのうち!「mkdir dir&&cd」を表し、最初のパラメータをとるとディレクトリ名が得られます.
3)オペレータ(Modifiers)オプションのパラメータセクションの後に、1つ以上の使用を指定できます:開始オペレータ