シェルスクリプトでのディレクトリ変更操作の防止または検出

シェルスクリプトでのディレクトリ変更操作の防止または検出

プラグインを許可するライブラリがあります。これらのプラグインはシェルスクリプトです。プラグインがスクリプト内のすべてのコマンドの現在の作業ディレクトリを変更しないようにしたいと思います。

私ができることの1つは、cdmakeまたはimilを介して一種のno-opを入力してディレクトリの変更を防ぐことです。これは悪い考えのようで、おそらく権威主義的すぎたり過酷すぎるようです。

私ができるもう1つのことは、プラグインが一連のテストに合格するように強制し、そのテスト内のスクリプトのディレクトリの変更を何らかの方法で検出することです。 (ディレクトリ変更コマンドが実行されるとテストは失敗します。)

私の質問は - 良い方法はありますか?防ぐcd'ing(および同様のコマンド...それらは何ですか?)、または発覚シェルスクリプトのCD?

ベストアンサー1

プラグインの実行 - サブシェルアプローチを使用すると(主にプラグインが高レベルの状態を破壊する必要があるかどうかに関して主な欠点がありますが)、プラグインは高レベルのchdir作業ディレクトリを変更しないため、任意の呼び出しを行うことができます。 :

assumethisistheplugincode() {
    cd /tmp
    pwd
}

cd /var/tmp || exit 1
printf "before "
pwd

# and this is how we run a "plugin", in a subshell...
( assumethisistheplugincode )

printf "after "
pwd

おすすめ記事