0

find ./ -name $1基本的に非常に単純なアイデアを実行する .bash_profile で bash 関数を作成したいのですが、機能しないようです。私の試行では、正しい方法で印刷されません。

find_alias() {
     `find ./ -name $1 -print`                                                                                                                                                                           
 }
 alias ff='find_alias $1'

上記のようなff *.xmlことをすると、次の1つのライナーが得られます。

bash: .pom.xml: アクセス許可が拒否されました

その後は以下。

find_alias() {
    echo -e `find ./ -name $1 -print`
}
alias ff='find_alias $1'

それらをすべて見つけますが、その出力を1つの巨大な長い行に入れます。ここで何が間違っていますか?

4

2 に答える 2

2
find_alias() {
  find ./ -name $1 -print
}

バックティックは必要ありません。それは、findコマンドが返すものを実行しようとします。

于 2012-09-10T04:37:57.617 に答える
1

バッククォートにより、シェルはその内部の出力を実行する必要があるコマンドとして扱います。試してみると´echo "ls"´、最初に実行echo "ls"され、テキストである出力を取得してから、lsすべてのファイルをリストして実行します。

あなたの場合find ./ -name *.xml -print、一致したファイルのリストであるテキスト結果を実行しています。もちろん、一致するファイル名 (ほとんどの場合) はコマンドではないため、意味がありません。

得られる出力は、次の 2 つのことを意味します。

  • pom.xml からスクリプトを実行しようとしました (入力した場合のように ./pom.xml) - 意味がありません
  • そのファイルの実行権限がありません

したがって、@Mat が提案したように、問題の簡単な解決策は、バックティックを削除し、出力をfind端末に表示することです。

于 2012-09-10T05:13:39.617 に答える