端末を閉じずにすべての変数をクリアする


10

端末を閉じずにコマンドプロンプトで定義したすべての変数をクリアする方法を知りたいのですが。

たとえば、コマンドプロンプトで次のように変数を設定したとします。

$ a=1

次に、$aターミナルを閉じずに変数(および同様に定義された他の多くの変数)を削除します。使用できunsetましたが、大きいのが多ければ多忙です。変数の


2
exec "$0"多分-しかし、あなたがグローバルで何を意味するのかを伝えるのは難しいです。
mikeserv 2014

3
なぜそれをしたいのですか?
Hauke Laging 2014

1
@HaukeLagingスクリプトを使用して配列を操作しています。私は時々それに1つの要素を追加します。そのため、古い値でスクリプトを実行できません(配列が変更されているため)。ターミナルを閉じて、新しいセッションを再開する必要があります。はっきりさせてほしい。そうでなければ私に知らせてください:)
エドワード・トーバルズ

1
@muru-彼は$varwithに保存されたリストを取得し、var=$(declare -p +F);それを引数として関数に渡します。echo "${2%%=*}".この答えには、サイズの問題がいくつかありますが、環境が大規模でない場合は機能します。
mikeserv 2014

3
あなたが何をしようとしているのか分かりません。対話型のシェルまたはスクリプトについて話しているのですか?対話型シェルから実行されるスクリプトで設定された変数は、親シェルには影響しません。どの行き止まりではなく、達成したいことを教えてください
Gilles「SO-邪悪なことをやめなさい」2014

回答:


9

する場合(GNU coreutils)

exec env --ignore-environment /bin/bash

あなたは新鮮で新しい環境を使います


どうexec "$0"ですか?
Edward Torvalds

@edwardtorvalds $0は、実行されるシェルの0番目の引数です。したがって、実行してbash $0いる場合はbash (おそらく- バージョンによって-bash-loginシェルのケースの場合がありますです。#!/bin/bashバンラインを使用してスクリプトを実行している場合、$0はスクリプトへのパスです。exec "$0"おそらくより柔軟ですがexec bash、より明示的です。端末でそのコマンドを入力する場合bashは、それがインタラクティブ環境にあることを認識し、同等のことを行う必要があります。これによりbash -i~/.bashrcファイルも実行されます。
mikeserv

これは助けにはなりません export a=123。その変数は継承されます...
刺激

1

envGNU coreutilsによって提供されるを使用できます(通常、GNU / Linuxシステムにプリインストールされています)。

exec env --ignore-environment /bin/bash

execシステムコールは、現在のプロセスが、環境に対応していない新しいバージョンのシェルに置き換えられます。

これには、エクスポートされた環境変数をクリアするという利点もあります。


しかし、これにより、変更されたPATH変数がクリアされexport PATH=$PATH:~/fooます。
Edward Torvalds

あなたが正しいです。$ 0の代わりにシェルの絶対パスが使用されるように、回答を変更しました。
user30747

user30747のおかげで、私のものを正すためにあなたの答えを盗みました。承認された回答を削除できません
Gilles Quenot
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.