パス内のすべての「/./」発生(重複する可能性がある)を「/」に置き換えることは「安全」ですか?

パス内のすべての「/./」発生(重複する可能性がある)を「/」に置き換えることは「安全」ですか?

/.//POSIX互換システムで元のパスと同じ宛先に接続することを保証する交換されたパス(重複する可能性があります)がありますか?

例:

#!/bin/bash

shopt -s extglob

some_command -- "${@//\/+(.\/)//}"

修正する:

コメントを考えると同じではないので、質問を更新します。

POSIX準拠システムが元のパスと同じ宛先に接続することを保証する方法/././で表示される(重複する可能性がある)、パスは置き換えられましたか?/./

ベストアンサー1

残念ながら、「POSIX互換システム」は現実の世界ではやや曖昧です。 POSIXは、標準のさまざまな部分とサブセクションを通じて、コマンドセット、シェル、ファイルシステム、システムコール、スレッドインターフェイスなどの一部をカバーしています。多くのシステムはPOSIXと互換性がありますが、拡張機能があるか、POSIX標準部分が互換性がない、または拡張部分と共存します。

//場合によっては、一部のシステムでは文字列の先頭が特別に処理されることがあります。

残りの文字列は、POSIXシステムまたはPOSIX互換サブシステムとインターフェースするシステムで置き換えるか、同じでなければなりませ/././/.//また、ほとんどの場合、//文字列の先頭や複数の連続したスラッシュを除くすべての項目は、justに縮小できます/

しかし、いくつかのものはまだあなたを倒すことができます。シェルとFSは/foo//barこれらを同じように扱うことができますが、/foo/barファイルシステムの外側のファイルを指すWebサーバーのようなものは、URL側でファイルを同じように扱わないかもしれません。これは、URLからFSのファイルにマッピングするのが簡単に見えるかもしれませんが、ある標準と他の標準が素直に推測されるとおりに必ずしも正確にマッピングされない場所があるからです。 FSの前にある他のネットワーク層も同様の極端なケースを引き起こす可能性があります。

/foo//bar特に、私たちのチームは、私たちの設定で最初に同じバックエンドファイルをキャッシュしますが、2つの異なるキャッシュTTLを持つ2つの異なるキャッシュオブジェクトに使用されることを発見したときに静的ファイルを提供するApacheサーバーの問題を思い出しました。/foo/bar。より早くキャッ​​シュします。 Varnish 構成を正式な形式で再構築すると、この問題は解決されます。

おすすめ記事