terminali kapatmadan tüm değişkenleri temizle


10

Terminal kapatmadan komut isteminde tanımladığım tüm değişkenleri nasıl temizleyeceğimi bilmek istiyorum ?

örneğin, komut isteminde bir değişkeni şu şekilde ayarlarsam:

$ a=1

şimdi $aterminali kapatmadan değişkeni (ve benzer şekilde tanımlanan birçok değişkeni) silmek istiyorum . Kullanabilirdim unsetama büyük hayır varsa telaşlı olacak. değişkenlerin


2
exec "$0"belki - ama küresel olarak ne demek istediğinizi söylemek zor .
mikeserv

3
Neden bunu yapmak istiyorsun?
Hauke ​​Laging

1
@HaukeLaging Komut dosyası kullanarak dizilerle çalışıyorum. Bazen ona bir eleman ekliyorum. Bu nedenle (dizi değiştirildiğinden beri) eski değerlerle komut dosyasını çalıştıramıyorum. Terminali kapatıp tekrar yeni bir oturum başlatmalıyım. Umarım netleştirmişimdir. değilse lütfen bana bildirin :)
Edward Torvalds

1
@muru - o bir kaydedilmiş bir liste alır $varile var=$(declare -p +F);yapan bir işleve argüman olarak bu geçer sonra echo "${2%%=*}".da çevre büyük değilse ancak çalışması gerekir - Bu cevap sırf boyutu ile birkaç sorun vardır.
mikeserv

3
Ne yapmaya çalıştığın hakkında hiçbir fikrim yok. Etkileşimli bir kabuk veya bir senaryodan mı bahsediyorsunuz? Etkileşimli kabuktan yürütülen bir komut dosyasında ayarlanan değişkenler üst kabuğu etkilemez. Neyi başarmak istediğinizi söyleyin, hangi çıkmazda ilerlediğinizi değil .
Gilles 'SO- kötü olmayı bırak'

Yanıtlar:


10

Eğer yaparsanız (GNU coreutils)

exec env --ignore-environment /bin/bash

yeni ve yeni bir ortam kullanacaksın


Ne hakkında exec "$0"?
Edward Torvalds

@ edwardtorvalds $0yürütülen bir kabuğun sıfırıncı bağımsız değişkenidir. Yani, çalıştırıyorsanız bash $0olduğunu bash (- bu olabilir muhtemelen -bashbir de -lsürümüne bağlı OGIN kabuk durumda) . #!/bin/bashBangline içeren bir komut dosyası çalıştırıyorsanız, komut dosyasının $0yoludur. exec "$0"muhtemelen daha esnektir, ancak exec bashdaha açıktır. Bu komutu bir terminale girerseniz, bashbunun etkileşimli bir ortamda olduğunu fark etmeli ve bash -i- ~/.bashrcdosyasının da çalışmasını sağlayacak eşdeğerini yapmalıdır .
mikeserv

Bu yardımcı olmuyor export a=123, bu değişken kalıtsaldır ...
teşvik

1

Sen kullanabilirsiniz env(genellikle GNU / Linux sistemlerinde önceden yüklenmiş) GNU coreutils tarafından sağlandığı,:

exec env --ignore-environment /bin/bash

Exec sistem çağrısı, mevcut işleminizin yerinde, kabuğunuzun yeni, çevresiz sürümü ile değiştirilmesini sağlar.

Bunun, dışa aktarılan ortam değişkenlerini de temizleme avantajı vardır .


Ancak bu, değiştirilmiş PATH değişkenimi temizler, örneğin export PATH=$PATH:~/foo, değil mi?
Edward Torvalds

Haklısın. Cevabımı değiştirdim, böylece kabuğun mutlak yolu $ 0 yerine kullanılacak.
user30747

User30747 sayesinde, benimkini düzeltmek için cevabınızı çaldı. Kabul edilen cevap silinemiyor
Gilles Quenot
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.