Çevresel değişkenler olmadan kabuk betiği çalıştırma


17

Bildiğim gibi, yeni çalışan kabuk betiği ortam değişkenlerini devralır. Bunu engellemenin bir yolu var mı? (değişken devralma olmadan çalışan kabuk)

Yanıtlar:


21

Komut dosyasını env -içalıştırmadan önce ortamı temizleyecek komut dosyanızın önüne ön ek ekleyebilirsiniz :

env -i sh test.sh

Gönderen man env:

-i, --ignore-environment
              start with an empty environment

Bunu neden yapmak isteyeceğinizden emin değilim ...


Teşekkürler. Bu işe yaradı! IDE yapılandırma çevresel değişkenleri etkilemeden IDE yapı komut dosyası çağırmak için buna ihtiyacım var. Ama hala hedefe çok uzak. Bu merakınıza yardımcı olabilir!
Eonil

Başka bir kullanım örneği eklemek için: Şu anda balık ve zsh'ı bash'a alternatif olarak değerlendiriyorum. Ama aday kabuğunu giriş kabuğum olarak tanıtmaya hazır değilim (olduğu gibi chsh .... Eğer sadece bir terminal penceresi açar ve çalıştırırsam zshveya fish(önemli olan veya olmayan -l), ortamımı her türlü değişkenle kirletir kabuk ben başlattım ile hile yapmak. env -cBenim için çözer bu sorunu ben biliyorum. env -i TERM=xterm-256color $(which fish).
Paidhi

Ortam düzgün yapılandırılmadığından ve sınamanız gerektiğinden başarısız olan bir cron göreviniz varsa bu yararlıdır; komut dosyalarınızın çevre ayarları hakkında varsayımlar yapıp yapmadığını test etmenin de iyi bir yolu. Teşekkürler!
Ağustos'ta 4

Bunun yararlı olabileceği bir diğer olası yer, senaryoda çevresel bağımlılık olmadığından emin olmak için bazı periyodik işleri (cron işleri gibi) test etmektir. Bir kukla bildiriminde "Exec" kaynağında çalıştırılacak komutlarla aynı şey.
TommyTheKid

1

Bir olasılık (oldukça çirkin görünse de):

exec -c $SCRIPT$ SCRIPT boş bir ortamla başlayacaktır. ( man basharamaya bakın exec \[-cl\]).


1
Bu env -i ile neredeyse eşit şekilde çalıştı, ancak exec komut dosyasının geri kalanını yürütmeyi durdurduğundan env -i kullanmayı seçtim.
Eonil

-1

Bildiğim kadarıyla cevap "Hayır". Betiğin içindeki çevresel değişkenleri geçersiz kılabilirsiniz. Ortam değişkeninin değeri, komut dosyası çalıştıktan sonra orijinal değerine geri dönmelidir. Büyük olasılıkla betiği bir alt işlem olarak çalıştırmanız gerekir: $ this.script.sh & böylece ortam değişkenlerinizi orijinal değerlerine sıfırlamak için betiğinizi çalıştırdığınızda tek seferde kabuğunuzdan çıkış yapmak zorunda kalmazsınız.

Düzenle:

Daha önceki bir posterden, bunun mümkün olmadığı konusunda yanıldığım anlaşılıyor.

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.