web-dev-qa-db-ja.com

「。」を元に戻すまたは「ソース」

スクリプトから間違った環境を誤って取得しました。それを「ソーシング解除」する方法、つまり、元に戻して以前の環境を復元する方法はありますか?

もちろん明らかな答えは、クリーンなShellセッションから始めることですが、別の解決策があるかどうか知りたいです。

更新:一部の変数を設定するスクリプトのみを参照していました。

7
UVV

いいえ、スクリプトのソースの効果を取り消すための一般的な方法はありません(またはスクリプトを「単に」実行することさえも)。これは、元に戻せないコマンド(ファイルの削除など)が存在するという事実の結果です。スクリプトに元に戻せないコマンドが含まれている場合、そのスクリプトのソースの影響も元に戻せません。

12
igal

「アンソーシング」する方法、つまり元に戻して以前の環境を復元する方法はありますか?

いいえ、一般的に自動化する方法はありません。

ただし、あなたが何をsource- edしたかはわかりません。おそらく、元に戻すのは簡単です(例: PATH を以前によく知られたものから変更するだけ)。

事前に知っているこれを実行する必要がある場合は、サブシェルでsourceコマンドを実行し、その効果を元に戻すことができます(範囲が設定に限定されていないため)シェルまたは環境変数)サブシェルを終了します。

したがって、実行すると:

(source set-variables; run-command-with-variables); run-command-without-variables

...その後run-command-with-variablesにはそれらの変数が設定されますが、run-command-without-variables しない。


また、理論的にはシェル関数を記述できるように、これらの関数に関連付けられたメタデータをチェックしてスクリプトをソースすることで、どのシェル関数が設定されたかを識別することもできます。特定の(パラメーター化された)ファイル内で定義されている他のすべての関数の設定を解除するソース可能なスクリプト。ただし、非関数変数の場合は、それらを設定解除できるようにするための情報が保存されていません(以前の値の識別がはるかに少ない)。

3
Charles Duffy