私は長いfind
ユーザーですが、スクリプトでコマンドを実行してみるのはbash
今回が初めてのようです。find
複数の関数に渡された最初の引数を見つけるために、すべてのプロジェクトソースファイルを繰り返したいと思います。私は仕事をしているように見える小さなawkスクリプトを書いてテストしました。次のコマンドラインで実行できます。
find sources -name '*.cpp' -exec awk -f foo.awk {} \;
問題は、次のようにスクリプトに入れようとしたときに発生します。
echo find sources -name *.cpp -exec awk -f foo.awk {} \\\; >foo.sh
このように、foo.shには次のものが含まれます。
find sources -name *.cpp -exec awk -f foo.awk {} \;
ここで bash シェルにソースを入力すると、
source foo.sh
エラーが発生しました。
検索: '-exec'引数がありません
引用問題だと思って最後のセミコロンの前にバックスラッシュを倍増しました。違いはありません。ただ笑うためにバックスラッシュを3倍にしてみました。それでも違いはありません。
完全公開:私はGNU Awk 5.1.0を使用してcygwinでWindows 10を実行しています。私はスクリプトにcatを使用しているので、行末の問題を解決する必要があります。
修正する
しかし、私はそうしません。別のawkスクリプトを使用して実行すると、この質問に貼り付けたスクリプトが正しく機能します。明日もう一度お試しください。結果を投稿します。
あなたの寛容に感謝します。
答え1
これは、引用符がないため、*.cpp
渡される前に展開されるか、現在のディレクトリにファイルがあるfind
場合に*cpp
スクリプトに書き込まれる前にも発生するためです。
私が正しいならば、これはあなたに必要なことをしなければなりません:
echo "find sources -name '*.cpp' -exec awk -f foo.awk {} \;" >foo.sh