- 締切済み
直前に使ったコマンドを実行する
Unixコマンドについてです。 cd Desktop と直前にコマンド使った時に、 直前に使ったcdをもう一度使える記法はありませんか? !!だと「cd Desktop/Picture」が実行されてしまいますが、例えば、「!^ Picture」とコマンドと打てば「cd Picture」をしたことと同じ意味のコマンドになるような記号があったりしませんか?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- trapezium
- ベストアンサー率62% (276/442)
> 「最近のシェルは普通に履歴検索とか編集機能とか付いてそれほど使わなくなりましたけど」というのは、どういう意味ですか?もしよろしければ詳しく聞かせていただけますか? bash の説明して頂いたので、その項目で言えば Command Line Editing の項です。 コマンドラインでのカーソル移動の Ctrl-b/f/a/e や Meta-b/f, 削除の C-d/M-d やペースト C-y などと、履歴を遡る C-p/n, 検索する C-r などがありますし、自分好みにカスタマイズも色々できます 例えば 1 vi a.c 2 make 3 ./a.out この状態で b.c を編集するとして $ !v:0 b.c としてもいいし $ C-rvM-fC-k b.c と入力してもいいわけです。ちょっと面倒に見えますが目で確認できるメリットはあります。(magic-space や M-^ 使えば !v:0 も展開できるので一緒ですが) そして「最近の」と書いたのは、自分が使い始めた頃の csh (BSD4.2) には履歴置換機能はありましたが編集機能はありませんでした。Bourne Shell は言わずもがなです。その後 tcsh や ksh が出てきて編集/検索機能が使えるようになりますが、OS 標準では無いので基本は csh か sh の期間が長かったですね
- kmee
- ベストアンサー率55% (1857/3366)
まず。 コマンドラインを受け付けて、実行するような部分は、Unixの一部にはなっていますが、Unixそのものではありません。 「シェル」と言います。 Unix系のOSでは、いわゆる「ワイルドカード」とか、変数置換とかはシェルの仕事です。 履歴を呼び出して変更する、というのもシェルの仕事です。 シェルはいくつも種類があります。それらで、上記のような「ワイルドカード」とかの機能に違いがあります。 ですから、まず、あなたが使っているシェルを確かめましょう。 echo $SHELL でわかるはずです。 そうしたら、そのシェルのマニュアルを読んでください。 man 知りたいコマンド でオンラインマニュアルを読むことができます。 例えば bash というシェルでは http://linuxjm.sourceforge.jp/html/GNU_bash/man1/bash.1.html > 履歴の展開 > イベント指示子 (Event Designator) に使用できるものが書いてあります。 ただ。 既出ですが、最近のシェルはカーソルで戻って編集して実行、というのが簡単にできるものも多いので、昔ほど必要な知識ではなくなりましたね。
- trapezium
- ベストアンサー率62% (276/442)
csh や bash だと !:0 Picture ですね ちなみに !^ は !:1 と同じ、!-2 は履歴の相対指定、!123 は絶対値指定、この組み合わせで !-2:$ とかも出来ますが、最近のシェルは普通に履歴検索とか編集機能とか付いてそれほど使わなくなりましたけど。
お礼
ご回答ありがとうございます これです!探していたのは。 「最近のシェルは普通に履歴検索とか編集機能とか付いてそれほど使わなくなりましたけど」というのは、どういう意味ですか?もしよろしければ詳しく聞かせていただけますか? ちなみに私の目的は、長いコマンドを打ったあと、同じコマンドを引数だけ変更して、実行するときのためでした。例えば、 vncserver -list !:0 -kill :25 のように使うためです
- Higurashi777
- ベストアンサー率63% (6296/9885)
文字通り「直前」に使ったコマンドを修正して使いたいのであれば、^が使えますが・・・。 一例: hogehoge>> cd /aaa cd /aaa hogehoge>> ^aaa^bbb cd /bbb となります。要は「直前で実行したコマンドの特定の文字列を入れ替える」機能ですね。 まぁ、簡単なコマンドであればこの機能を使用するよりも直接打ち込んだ方がよっぽど速いですが(笑) 以上、ご参考まで。
お礼
ご回答ありがとうございます すべての引数を変更して実行したいので、^aaaのようにどの引数を変更するか指定するのは、ちょっと面倒ですね
お礼
ご丁寧にご説明ありがとうございます なんとなくUnixコマンドなどと思って、使っていたので、詳しい方からすると言葉遣いがおかしいのでしょうね。すみません。 (ちなみに、Macのターミナルから使うので、デフォルトでbashになってます)