2012-05-05 8 views
3

ディレクトリBから実行すると、ディレクトリのディレクトリ構造がディレクトリB内にミラー化されているbashスクリプトを作成しています。次のようにファイルパスの一重引用符を検索して検索する

現在、私はそうやっている:

#!/bin/bash   

dirify() { 
    echo $1 
} 
export -f dirify 

find "../test" -type d -exec bash -c "dirify '{}'" \; 

私はディレクトリBからこのスクリプトを実行している、と../testがディレクトリAです。 幸いにも、私がテストするために使用しているディレクトリには、'という名前のフォルダが含まれています。私はこのスクリプトを実行すると、それはこれらのディレクトリに到達したとき、bashは以下のエラーを与える:

> bash: -c: line 0: unexpected EOF while looking for matching `'' 
> bash: -c: line 1: syntax error: unexpected end of file 

(0と1行目はdirify()関数内の行を参照してください。その行に注意してください)

のより簡単な方法次のようにこの問題を説明することである:

find "../test" -exec bash -c "echo '{}'" \;

この例では、同じエラーを生成します。

とにかく、これは問題です。プロダクションでは、ファイルパスに'文字が含まれていないと想定できないためです。

この問題の回避方法はありますか?

答えて

2

引数として渡します。

bash -c 'dirify "$1"' dirify {} 
+0

素晴らしい!ありがとう。この構文の仕組みを簡単に説明できますか? – finiteloop

+0

'-c'でスクリプトを実行すると、bashは追加の引数をとり、' $ 0'からそれらを割り当てます。 –

+0

ありがとう!非常に役立ちます。 – finiteloop