スクリプトがエイリアスを使用して特定のディレクトリで実行されており、文字列照合を使用していないかどうかを確認するためのbashテスト

エイドリアン・トンプキンス

パブリックコード用に作成しているbashスクリプトがあり、ユーザーがgitリポジトリ(またはそのサブディレクトリ)でスクリプトを直接実行していないことを確認したいと思います。リポジトリの場所を指す環境変数CODELIBがあり、サブディレクトリをキャッチするワイルドカードを使用して、次の方法で文字列照合をテストしていました。

if [[ `pwd` == *${CODELIB}* ]]; then
  echo "error: do not run in your git repository " $CODELIB
  exit 1
fi

これはほとんどの状況で正常に機能しますが、AFSを使用している私の雇用主のように、ユーザーが$ HOMEのサブディレクトリにコードを持っている場合、時々見つけられます。一部のユーザーにとっては、ホームが次のようにマウントされるようなエイリアスが使用されているようです。

cd $HOME
pwd

これを与える

/afs/xyz.it/home/t/user/

これの代わりに

/afs/xyz/home/t/user/

変数CODELIBが指すように

/afs/xyz/home/t/user/code_location

この場合、私のテストは失敗します。したがって、文字列照合に頼ることなく、ディレクトリが別のディレクトリのサブディレクトリであるかどうかをより堅牢にテストできる組み込み関数がbashにあるかどうか疑問に思いました。

私がここで見つけた解決策:https//unix.stackexchange.com/questions/6435/how-to-check-if-pwd-is-a-subdirectory-of-a-given-pathはすべて文字列照合に基づいていました

jhnc

realpath両方のディレクトリで使用できます

if [[ "$(realpath "$(pwd)")"/ == "$(realpath "${CODELIB}")"/* ]]; then

realpath利用できないがperlが次の場合

realpath(){
    perl -MCwd -e 'print Cwd::realpath($ARGV[0])' "$1"
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ