-execの検索マニュアルを読んでいます。注文する{}スイッチセクション。これは、シェルの解釈を防ぐために{}を引用する必要があることを示します。
私はこの動作を成功させずにローカルで再現しようとしましたが、この説明がどのコンテキストで適用されるかを知りたいと思います。
この説明が正しく機能するように私がやっていることは次のとおりです。
echo "Hi" > f1
touch -- \$\(ls\ \-la\) -n
find ./ -type f -exec cat {} +
デフォルトでは、悪意のあるファイル名を解析するときにスイッチやコマンドを解釈しようとするだけで、人が提案したとおりに解釈されるわけではありません。
私は何を見逃していますか?
または、他のコマンドの代わりにcatをコマンドとして使用して、このようなコード行を利用する方法はありますか?
ベストアンサー1
多くのシェルでは、中括弧は中括弧の拡張を開始します。ただし、sh互換シェルであるZshと(t)cshは依然として一般的な内容を保持します{}
。しかし、少なくともフィッシュシェルはそうではありません。 unquote を削除して{}
から、たとえば空白行のみをecho {}
出力します。これにより、find
使用されたコマンドが中断されるため、{}
中括弧を引用する必要があります。
find
これは、埋められた後にシェル拡張のために処理されるファイル名とは関係ありません。この時点でシェルを明示的に呼び出さない限り、シェルは関連しません。