• 締切済み

直前に使ったコマンドを実行する

Unixコマンドについてです。 cd Desktop と直前にコマンド使った時に、 直前に使ったcdをもう一度使える記法はありませんか? !!だと「cd Desktop/Picture」が実行されてしまいますが、例えば、「!^ Picture」とコマンドと打てば「cd Picture」をしたことと同じ意味のコマンドになるような記号があったりしませんか?

みんなの回答

  • trapezium
  • ベストアンサー率62% (276/442)
回答No.4

> 「最近のシェルは普通に履歴検索とか編集機能とか付いてそれほど使わなくなりましたけど」というのは、どういう意味ですか?もしよろしければ詳しく聞かせていただけますか? 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)
回答No.3

まず。 コマンドラインを受け付けて、実行するような部分は、Unixの一部にはなっていますが、Unixそのものではありません。 「シェル」と言います。 Unix系のOSでは、いわゆる「ワイルドカード」とか、変数置換とかはシェルの仕事です。 履歴を呼び出して変更する、というのもシェルの仕事です。 シェルはいくつも種類があります。それらで、上記のような「ワイルドカード」とかの機能に違いがあります。 ですから、まず、あなたが使っているシェルを確かめましょう。 echo $SHELL でわかるはずです。 そうしたら、そのシェルのマニュアルを読んでください。 man 知りたいコマンド でオンラインマニュアルを読むことができます。 例えば bash というシェルでは http://linuxjm.sourceforge.jp/html/GNU_bash/man1/bash.1.html > 履歴の展開 > イベント指示子 (Event Designator) に使用できるものが書いてあります。 ただ。 既出ですが、最近のシェルはカーソルで戻って編集して実行、というのが簡単にできるものも多いので、昔ほど必要な知識ではなくなりましたね。

newtgecko
質問者

お礼

ご丁寧にご説明ありがとうございます なんとなくUnixコマンドなどと思って、使っていたので、詳しい方からすると言葉遣いがおかしいのでしょうね。すみません。 (ちなみに、Macのターミナルから使うので、デフォルトでbashになってます)

  • trapezium
  • ベストアンサー率62% (276/442)
回答No.2

csh や bash だと !:0 Picture ですね ちなみに !^ は !:1 と同じ、!-2 は履歴の相対指定、!123 は絶対値指定、この組み合わせで !-2:$ とかも出来ますが、最近のシェルは普通に履歴検索とか編集機能とか付いてそれほど使わなくなりましたけど。

newtgecko
質問者

お礼

ご回答ありがとうございます これです!探していたのは。 「最近のシェルは普通に履歴検索とか編集機能とか付いてそれほど使わなくなりましたけど」というのは、どういう意味ですか?もしよろしければ詳しく聞かせていただけますか? ちなみに私の目的は、長いコマンドを打ったあと、同じコマンドを引数だけ変更して、実行するときのためでした。例えば、 vncserver -list !:0 -kill :25 のように使うためです

回答No.1

文字通り「直前」に使ったコマンドを修正して使いたいのであれば、^が使えますが・・・。 一例: hogehoge>> cd /aaa cd /aaa hogehoge>> ^aaa^bbb cd /bbb となります。要は「直前で実行したコマンドの特定の文字列を入れ替える」機能ですね。 まぁ、簡単なコマンドであればこの機能を使用するよりも直接打ち込んだ方がよっぽど速いですが(笑) 以上、ご参考まで。

newtgecko
質問者

お礼

ご回答ありがとうございます すべての引数を変更して実行したいので、^aaaのようにどの引数を変更するか指定するのは、ちょっと面倒ですね

関連するQ&A

  • UNIXで、直前のコマンドの一部を置き換えるときに

    UNIXでは、 ^AAA^BBB と入力すると、 「直前に実行したコマンドの、AAAをBBBに置き換えたものを実行する」 というようになっている、と思います。 さて、私がWindows上で使っているMSYS(UNIX風の環境を作り出すもの。)では、 直前のコマンドに、AAAが2箇所以上あるときに、最初の1箇所しか置き換えてくれません。 それはUNIXとしては普通の仕様なのでしょうか。 AAAが2箇所以上あるときに、それをすべてBBBに置き換えるためには、どのようにすればよいですか。

  • SQL*Plusで以前に実行したコマンドを再実行したい

    Oracle 9iを使用しています。 SQL*Plusで以前に実行したコマンドを再度実行することは可能でしょうか。 RUNコマンドで、直前に実行したコマンドなら再実行できることがわかったのですが、それよりも前に実行したコマンドを再実行する方法を知りたいです。 例えば、UNIXのcshの場合、historyコマンドで、以前に実行したコマンド一覧が表示され、!3 のように、コマンド一覧番号を指定すると、任意のコマンドを実行できます。 これと同じようなことがSQL*Plusでも可能でしょうか?

  • Unixコマンド コマンドを再実行

    Windowsのコマンドプロンプトで、前回行ったコマンドを再実行する際、F3キーを押しますが、それと同様な処理を行なうUnixコマンドを教えて下さい。

  • コマンドの連続実行とコマンドのグループ化の違い

    Red Had系使用していますが、コマンドの連続実行とコマンドのグループ化の違いがいまひとつ分かりません。 たとえば、 cd /var;ls;pwd(コマンドの連続実行)と{ cd /var;ls; };pwd (コマンドのグループ化)の実行結果が同じであり、このコマンドのグループ化とは一体何の意味があるのですか? 返答の程よろしくお願い致します。

  • Linuxのコマンド「history」で実行日時を知りたい

    Linux(unix)のコマンド「history」で、これまでに実行したコマンドの実行日時を知りたいのですが、オプションを付ける事で可能でしょうか?

  • 特定コマンドを同時実行

    UNIXで、同じコマンドを複数同時に実行する方法がわかりません。 実行させたいコマンドは条件によってほんの数秒で終わったり 長い時間がかかるため、ターミナルを複数上げて端から順番に enterしていくという方法では当然間に合いません。 このコマンドを何個同時に実行するよ、そういう方法ってないのでしょうか?

  • コマンドを実行?

    http://journal.mycom.co.jp/column/osx/145/ 上のURLの中で 【ファイルの入手】のしたのほうに 『コマンドを実行してCVS版のソースからバイナリを生成』と 書いてありますがまったくやり方がわかりません。 コマンドを実行するとはどういう意味ですか? 教えてください。

  • perlスクリプト内でシェルコマンドを実行するには??

    タイトル通りなのですが、perlスクリプト内でシェルコマンドを実行させる方法が分からなく、困っています。 実行したいシェルコマンドはUNIXのcrontab なのですが・・。 また、perlスクリプト内以外でシェルコマンドを実行する方法はあるのでしょうか?? どなたか分かる方いらっしゃいましたらご教授いただけると幸いです。よろしくお願いします。

    • ベストアンサー
    • Perl
  • ターミナルの勝手なコマンドの実行

    おとついぐらいから、ターミナルを起動しただけなのに /Users/ユーザー名/Desktop/a.out というコマンドが勝手に実行されて コンピュータ名:? MatsudaMasafumi$ /Users/ユーザー名/Desktop/a.out -bash: /Users/ユーザー名/Desktop/a.out: No such file or directory という2行が勝手に表示されてしまいます。 起動したときに /Users/ユーザー名/Desktop/a.out という実行を勝手に行ってしまう理由はなんなのでしょうか? また、この実行をやめたいのですがどのようにすればいいでしょうか?

    • ベストアンサー
    • Mac
  • Perlを用いたUNIXコマンド

    初歩的なことだとは思うんですけど、Perlを用いてUNIXコマンドを実行するのと、普通にUNIXコマンドを実行するのはどういった違いがあるのでしょうか。 調べてみたけれども中々それらしい答えが無かったので質問することにしました。よろしくお願いします。

    • ベストアンサー
    • Perl