アプリケーションの$PATH
環境変数を解析する必要があります。そのため、$PATH
でどのエスケープ文字が有効になるのか疑問に思いました。 /bin:d
というテストディレクトリを作成し、その中にfunny
というテストスクリプトを作成しました。絶対パスで呼び出すと実行されます。 :
で$PATH
をエスケープする方法がわかりません。コロンを\
でエスケープし、シングル'
とダブル"
の引用符で囲んでみました。 。しかし、常にwhich funny
を実行すると、それが見つかりません。 CentOS6を実行しています。
これは、POSIX標準では不可能です。これは特定のシェルの関数ではありません。PATH処理はCライブラリのexecvp関数内で行われます。いかなる種類の引用についても規定はありません。
これが、特定の文字(「ポータブルファイル名の文字セット」に含まれていないもの-例としてコロンが具体的に呼び出されているもの)を含めることを強くお勧めする理由です。
から SUSv7 :
このコンテキストでは
<colon>
は区切り文字であるため、PATHで使用される可能性のあるディレクトリ名には<colon>
文字を含めないでください。
GLIBC execvpのソース も参照してください。 PATHコンポーネントの処理にstrchrnul
関数とmemcpy
関数を使用しており、エスケープ文字をスキップしたりエスケープ解除したりすることはまったくできません。
関数を見てください extract_colon_unit
これは不可能だと私には思えます。 :
は、パス区切り文字として無条件かつ不可避的に使用されます。
まあ、これは少なくともbashには有効です。他のシェルは異なる場合があります。
mount
ingを試すことができます
mount /bin:d /bind
PATH=/bind