Ortam değişkeni ayarlanıp ayarlanmadığını kontrol etmem gereken bir kabuk komut dosyası yazıyorum. Bir ortam değişkeni önceden ayarlanmış olsun ya da olmasın, kabuk betiğini kontrol etmenin herhangi bir yolu var mı?Ortam değişkeni ayarlanmış olup olmadığını kontrol edin
cevap
[ -z "$VARIABLE" ] && VARIABLE="abc"
if env | grep -q ^VARIABLE=
then
echo env variable is already exported
else
echo env variable was not exported, but now it is
export VARIABLE
fi
Sana VARIABLE
olabileceğinden, [ -z $VARIABLE ]
yeterli olmadığını vurgulamak istiyoruz ama ihraç edilmedi. Bu, bir ortam değişkeni olmadığı anlamına gelir.
Bu, tüm kabuk ortamlarında çalışır mı? – Mojoy
@Senthilnathan: Evet, elbette, bu peacof kodunu daha taşınabilir yapmak için yeniden yazılabilen tek şey "grep -q". Biri yazabilirdi | env | Bunun yerine grep^VARIABLE =>/dev/null'. –
Bir değişkeni dışa aktarırsam, değişkeni dışa aktarmadan başka bir şeye ayarlarsanız, dışa aktarılmayan değişken ile dışa aktarılan değişkenim arasında eşleşmiyor mu yoksa dışa aktarılanı da otomatik olarak mı günceller? – ArtOfWarfare
if [ -z "$VARIABLE" ]; then
VARIABLE=...
fi
Bu, $ VARIABLE uzunluğunun sıfır olup olmadığını kontrol eder.
Ne yapmak istediğiniz bash yerli, denir parametre ikamesi: DEĞİŞKEN ayarlanmazsa
VARIABLE="${VARIABLE:=abc}"
, sağ taraftaki abc eşit olacaktır. Dahili operatörün: = ile değiştirilebileceğini unutmayın: - VARIABLE ayarlı veya boş değilse test eder.
Tam olarak aradığım şey. TEST_DATABASE_NAME dışa aktarma satırı = "$ {TEST_DATABASE_NAME: = prodlike}", TEST_DATABASE_NAME zaten tanımlı değilse yalnızca prodlike'yi varsayılan olarak kullanacaktır. Dağınık şartsız blok yok. Hepsi bir kod satırında. –
şartlı (ortamda veya olmasın) bir değişken atamak standart çözümdür:
o ayarlanmazsa yalnızca değer "foo" için VAR ayarlayacaktır: ${VAR=foo}
.
: ${VAR:=foo}
, çevrede VAR koymak takip etmek için::
export VAR
Ayrıca yapabilirsiniz export VAR=${VAR-foo}
VAR ayarlanmazsa veya boş dize, kullanım ise
VAR için "foo" ayarlamak için veya export VAR=${VAR:=foo}
, ancak bazı eski kabuklar, aynı satırdaki atama ve dışa aktarma sözdizimini desteklemez. Ayrıca, DRY; =
operatörünün iki tarafındaki adı kullanmak gereksiz tekrarlamadır. (Değişkeni veren ikinci bir satır aynı ilkeyi ihlal eder, ancak daha iyi hisseder.)
Ortamda bir değişkenin olup olmadığını belirlemek genel olarak çok zor olduğunu unutmayın. env
çıktısını ayrıştırma çalışmaz.
export foo='
VAR=var-value'
env | grep VAR
Ne de bir altkabuk ve testi yumurtlamaya çalışır: düşünün VAR ortamında olduğunun göstergesi olacağını VAR belirtmek istiyorum
sh -c 'echo $VAR'
alt kabukta ayarlanır, şu anki süreç, ancak basitçe VAR'ın alt kabuğun başlatılmasında ayarlanmış olması olabilir. Bununla birlikte, fonksiyonel olarak, sonuç VAR'ın çevrede olduğu gibi aynıdır. Neyse ki, VAR'ın çevrede olup olmadığını genellikle umursamıyorsunuz. Oraya ihtiyacın varsa, oraya koy. İhtiyacın varsa, çıkar onu.
": $ {VAR: = foo}" gösteriminin dahili olarak nasıl çalıştığına dair bir açıklama ekleyebilir misiniz? Ben her zaman çözüm olarak buluyorum ama asla NASIL çalışır. –
[StackOverflow] 'da bazı açıklamalar buldum (http://stackoverflow.com/questions/4437573/bash-assign-default-value)! –
- 1. Değişkenler listesinde yalnızca bir değişkenin ayarlanmış olup olmadığını kontrol edin
- 2. Yalancı olup olmadığını kontrol edin
- 3. Tablonun var olup olmadığını kontrol edin C#
- 4. Yolun ağda olup olmadığını kontrol edin
- 5. Türün bir arabirim olup olmadığını kontrol edin
- 6. Uzak makinede dosya olup olmadığını kontrol edin
- 7. Anahtarın sözlükte olup olmadığını kontrol edin. Değilse,
- 8. FinderSync uzantısı seçili olup olmadığını kontrol edin
- 9. Rest API'da kayıt olup olmadığını kontrol edin.
- 10. Java'da ResultSet boş olup olmadığını kontrol edin
- 11. Bir sayfanın açık olup olmadığını kontrol edin
- 12. img'nin src olup olmadığını kontrol edin
- 13. javascript css taşma olup olmadığını kontrol edin
- 14. $ viewContentLoaded Başarılı olup olmadığını kontrol edin
- 15. Makinemin internet erişimi olup olmadığını kontrol edin
- 16. Kaydedilecek bekleyen değişiklikler olup olmadığını kontrol edin
- 17. Tablo üzerinde kısıtlama olup olmadığını kontrol edin
- 18. Veri çerçevesinin mevcut olup olmadığını kontrol edin
- 19. CSS @media Webkit olup olmadığını kontrol edin
- 20. Öğenin animasyonlu olup olmadığını kontrol edin CSS3
- 21. Java'da sürekli değişiklik olup olmadığını kontrol edin?
- 22. Nesnenin nesne listesinde olup olmadığını kontrol edin
- 23. Stdin boş olup olmadığını kontrol edin
- 24. Ruby websocket Kullanıcının olup olmadığını kontrol edin
- 25. Listenin bir türü olup olmadığını kontrol edin?
- 26. Sayısal dizinin maskelenmiş olup olmadığını kontrol edin
- 27. Öğenin selenyumda tıklanabilir olup olmadığını kontrol edin
- 28. Dize sayısal olup olmadığını kontrol edin
- 29. Geçtiğimiz günlerde tarih olup olmadığını kontrol edin
- 30. İşletmenin açık olup olmadığını kontrol edin
Aslında, bu sorunun gerçek bir kopyası değildir: OP, bir değişkenin ayarlanıp ayarlanmadığını ve bir komut dosyası çıkarılmak yerine onunla ilgili bir şey yapıp yapmadığını bilmek ister. Bu durumda $ {V :?} geçerli bir cevap değildir. set | grep -q '^ V =' 'dır. Bu, değişkenin varlığı için test eder ve değişken ayarlanmış olsa bile boş dizeye çalışır. – Coroos