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 '{}'" \;
この例では、同じエラーを生成します。
とにかく、これは問題です。プロダクションでは、ファイルパスに'
文字が含まれていないと想定できないためです。
この問題の回避方法はありますか?
素晴らしい!ありがとう。この構文の仕組みを簡単に説明できますか? – finiteloop
'-c'でスクリプトを実行すると、bashは追加の引数をとり、' $ 0'からそれらを割り当てます。 –
ありがとう!非常に役立ちます。 – finiteloop