• ベストアンサー

UNIX/Linuxの「エイリアス置換」について

UNIX/Linuxの「エイリアス置換」のところで教えてください。 書籍に次のような記述がありました。 (なお、¥は「バックスラシュ」の意味です。) エイリアス置換をエスケープするには、コマンドの前に「¥」をつけます。たとえば、このようにrmが「rm -i」にエイリアスされている場合に、エイリアスされたrmではなく、本来のrmを実行したいならば、次のようにrmの前に「¥」をつけます。 % \rm test.txt エイリアス置換はそれ以上エイリアス置換ができなくなるまで繰り替えします。そのため、エイリアスの定義によってはエイリアス置換が止まらなくなることもあります。これを防ぐには、エイリアス置換の必要のないコマンドはエイリアス置換をエスケープしておくといいでしょう。 % alias rm  \\rm -i % alias rm (\rm -i) 【質問1】この2つめの段落の「エイリアス置換が止まらなくなることもあります」とはどのような事を指しているのでしょうか。 【質問2】このrmは「エイリアス置換をエスケープ」しているはずなのですが、試してみると、-iコマンドが生きていました。つまり、 alias rm   \\rm  -i と、 alias rm   rm  -i は同じ動きでした。何がいけないのでしょうか。

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

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

書式からして csh 系だと思うのでそれに従って: 1 の方: 例えば alias rm rm -i としたとします. これは, 「コマンドラインが rm という単語で始まっていたら, それを rm -i で置き換える」という意味です. そこで rm foo と入力すると, これは rm という単語で始まっているので rm -i foo と置き換えられます. ところが, これもやはり rm という単語で始まっているのでさらに rm -i -i foo に置き換わります. さらに (以下略) 2 の方: 普通は alias rm \\rm -i だと rm foo という入力に対して \rm -i foo に置き換えるんですが, これは rm という単語で始まっているとはみなさないのでここで置き換えが終了します. 一方, 最初から \rm foo と入力すると全く置き換えはされません. この場合には -i を付けずに実行されます. なお, csh はかなりアドホックな (あるいは「いきあたりばったりな」) 実装になっているので, alias rm rm -i でも 1 で述べたような問題は発生しない*かも*しれません.

maiko100
質問者

お礼

ご丁寧にありがとうございました。いわれてみればこういうことなんですね。

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

最初の語だけは特別扱いのようです。 alias echo echo A echo は A を表示しますが、 alias echo pwd ';' echo A echo はループになります。 alias echo pwd ';' \\echo A echo だと、ループにならず、pwd と echo A が実行されます。 csh も昔からあるコマンドなので昔はその書籍通り、alias rm rm -i でもループしていたのでしょう。ループを防ぐための他のやり方として、alias rm /bin/rm -i というのを見た事もあります。

maiko100
質問者

お礼

ご丁寧にありがとうございました。助かりました。

関連するQ&A