• ベストアンサー

Bashシェルスクリプト findのエイリアスに引数を渡すにはどうすれ

Bashシェルスクリプト findのエイリアスに引数を渡すにはどうすれば良いのでしょうか? $ alias a="ls $1 -a" $ a dir . .. ls_nara_ok $ alias a="find $1 -type d" $ a dir find: pathes must precede expression: a lsではうまく行くのに、findではエラーとなってしまいます。 どうすればスクリプト(エイリアス)内のfindに引数を渡せるのでしょうか?

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

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

いや、ls も うまくいってないです。 コマンドラインから > alias a="ls $1 -a" とした時点で""が展開されます。 $1には何も入っていない(echo $1 としてみればわかる)ので、この文は alias a="ls -a" となります。 a dir として ls dir -a を実行してるつもりなのでしょうが、 実際には ls -a dir が実行されています。 (linux等で採用されている)GNUのlsでは ls dir -a でも ls -a dir でも同じ表示になるので「正しい」と思ったのでしょう。 lsの正式な書式は「 ls [OPTION ...] [FILE ...] 」であり、他のlsでは、一つでもファイル/ディレクトリ名と認識されたら、それ以降の引数は-で始まっていてもファイル/ディレクトリ名と判定されます。よって ls dir -aは ls: -a: No such file or directory となります(-aというファイルが無い場合) bashでは、aliasの途中に引数を渡すようなことはできません。 そのような使いかたをするなら、functionで定義したり、シェルスクリプトにしたりしてください。

gotoumak
質問者

お礼

ありがとうございます! 詳しくご解説いただきまして、よくわかりました。 ありがとうございました!!

その他の回答 (2)

  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.2

findの構文間違えてません? パス(ディレクトリ)が無いと、指摘されてますよ。 find http://www.linux.or.jp/JM/html/GNU_findutils/man1/find.1.html エラーメッセージ訳しただけですけど。

gotoumak
質問者

お礼

質問文のエラーメッセージ間違えてました > find: pathes must precede expression: a > find: pathes must precede expression: dir です

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

alias a='find -type d' で a dir ではいかが。

gotoumak
質問者

お礼

$ a dir find: pathes must precede expression: dir

関連するQ&A