• ベストアンサー

Linuxコマンドの「^」について

LPICの勉強をしていて、LPI認定試験情報というサイトを見ていたのですが コマンドの引数を置き換えるときに「^A^B」というような使い方ができるという部分がありました。 例えばサービスを起動するstartとstopを連続でおこなう場合に上記のような形で コマンドが打てるらしいのですが、試しにやってみてもできませんでした。 また、この「^」があるとググってみても特にめぼしい情報が見つからなく困ってしまいました。 有識者の方、教えていただけませんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

ソースがどこか……って探してしまいました。 http://koshi-linux.net/linux-network/lpic3.html の10番ですかね。 man bash すると解説が出てきますが… 日本語マニュアルだと >イベント指示子 (Event Designator) > イベント指示子は、履歴リスト中のコマンドラインエントリを参照するものです。 の中の > ^string1^string2^ > 簡易置換。 string1 を string2 に置換して直前のコマンドを繰り返します。 ‘‘!!:s/string1/string2/’’ と同義です (後述の修飾子を参照)。 ですかね。 コマンドとは少し違うようですが…。 >例えばサービスを起動するstartとstopを連続でおこなう場合に上記のような形で >コマンドが打てるらしいのですが、試しにやってみてもできませんでした。 コマンドヒストリの最新にあるものが対象ですから… まず… service network stop で止めたあとに ^stop^start^ と入力してEnterを押すと……ということになります。 よって1つ目の文字列が直前のコマンドラインに含まれていなければ、置換のしようがありません。 man bash したあとに ^stop^start^ としても、「man bash」には"stop"なんて含まれませんから -bash: :s^stop^start^: substitution failed とエラーになって終わりです。 # というか…サービスとかだと restart とか実装されているパターンが多いのでほとんど意味がありませんな。 ls /bin のあとに ^bin^usr/bin^ ^bin^local/bin^ とか続けていけば意味はあるかもしれませんが。 # 上のヤツ、順に実行すると…最初に/bin、次で/usr/bin、その次で/usr/local/binとlsしていきます。 ふつ~にヒストリ呼び出して書き換えていましたかねぇ……。 まぁ、一つ勉強になったです。

obake1118
質問者

お礼

その問題です! 直接コピペするとまずそうな気がしたので微妙な表現になってしまいましたが 見つけて頂き感謝します。 ちなみに私も大抵サービスの再起動は「restart」だったのでこんな表現もあるのかと 試してみたのですが service stop^startとか打っていたのでできませんでした。 「!」の仲間だったんですね

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

重箱の隅を突っつくなら, 「コマンドとは少し違うようですが…」以前に「そもそも『Linuxコマンド』ってなんだよ」ですけどね>#2. 「UNIXコマンド」なら許せる. ^^^ とか ! とかのヒストリ展開は基本的に csh 由来だったと思います. なので, よしんばカーネルとして Linux を使っていても, シェルが Bourneシェル (エミュレーション) であればできないかも. 逆に Linux システムじゃなくても Bourneシェル以外のほとんどのシェルで使えるんじゃないかな. まあ要するに, これは「Linux がどうか」という問題ではなく「使っているシェルでサポートされているかどうか」だけのことなので, 他の回答者も挙げていますがシェルのマニュアルを見るのがよろしいかと.

obake1118
質問者

お礼

おっしゃるとおりでございます。 勉強不足です・・・ シェルのマニュアルはちゃんと読んだことがなかったので(基本的にはbash使ってます) これからしっかり見ていこうと思います。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

何を意図して、実際にはどんな風に入力したのが「できなかった」のですか? 使っているシェルはなんでしょうか? このようなものは、入力履歴から引用したり置換したりするので、manでは使用しているシェルの「履歴」の欄を見ましょう。 たとえば、bash なら http://linuxjm.sourceforge.jp/html/GNU_bash/man1/bash.1.html#lbCS のようなものが使えます。

obake1118
質問者

お礼

URL見ました。 いままで履歴は「!」だけだと思っていました。 JMは結構見るのですが、具体的なコマンドしか見ていなかったです。 勉強になりました。ありがとうございました。

関連するQ&A