1
for file in `find . -name "*.po"` ; do msgfmt -o `echo $file | sed s/\.po/\.mo/` $file ; done

私が見つけたこのコードは、PO ファイルからすべてのサブディレクトリに複数の MO ファイルを作成しています。最初のうちは、うまく機能します。しかし、2回目に実行すると;

いくつかの構文エラー メッセージが表示されます。msgfmt が不平を言っている PO ファイルを確認しましたが、以前は存在していませんでした。これらは、このコードを実行した後に作成されます。

たとえば、ファイルは secpolicy.po でしたが、別の secpolicy.po ファイルも作成されました。

そのコードで何が間違っていますか?

4

1 に答える 1

1

問題は、引用にある可能性が最も高いです。sed パターンを引用しないため、シェルはバックスラッシュを解釈し、sed を次のように呼び出します。

sed s/.po/.mo/

という名前のファイルがある場合secpolicy.po、それは に変更されse.molicy.po、その結果、

msgfmt -o se.molicy.po secpolicy.po

これを修正するにはsed

echo $file | sed 's/\.po$/.mo/'

追加の一重引用符'と string の終わりを参照してください$

ファイルがある場合はabc.po、ドット\.、文字列po、最後に行末に一致し、$この一致を に置き換え.mo、結果としてabc.mo

于 2013-02-03T00:22:33.207 に答える