İçimde bu çizgi var .bashrc
ve bunun tam olarak ne anlama geldiğini bilmek istiyorum
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
İçimde bu çizgi var .bashrc
ve bunun tam olarak ne anlama geldiğini bilmek istiyorum
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
Yanıtlar:
$-
'mevcut bayraklar' anlamına gelir.echo $-
"himBH" döndürür. Bunların hepsi varsayılan.[[ $- != *i* ]] && return
aslında bir yorumda yukarıda yazdığı şeyi yapar: etkileşimli bayrağın ayarlanıp ayarlanmadığını kontrol eder. [[Ve]] onu bir boole yapar, böylece “doğru” ya da “yanlış” olarak sonuçlanır. "false && return" devam etmesini sağlar "true && return" dönüşü gerçekleştirir.Varsayılan bayraklar daha ayrıntılı olarak açıklanmıştır:
h, "hash all" içindir: bash'a PATH'nizi sorgularken bulduğu komutların konumlarını hatırlamasını söyler.
i "etkileşimli" içindir: girdi girme ve çıktı geri alma.
m "monitör" içindir: bu iş kontrolünü sağlar
B "ayraç genişletme" içindir. Bu, ayraç genişletme kullanmanıza izin verir
H "tarih genişletme" içindir. Bu, sayınızı bir ünlem işaretiyle önyükleyerek geçmişinizden bir komutu yeniden çalıştırmanıza olanak sağlayan şeydir.
Bu arada. Sahibim ...
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
Temelde aynısını yapar ama okumayı daha kolay sanırım.
Temel olarak, "Kabuk bayrakları küçük harf i içermiyorsa, işlevi / betiği burada durdurun" anlamına gelir.
[[ ]]
bash içindeki koşullu bir ifadeyi belirtir
$-
Kabuk bayrakları anlamına gelir. Kabuk etkileşimli ise "i" yi içerecektir (yani komutları yazabilirsiniz, aksine bir betiği çalıştırıyor).
!=
basitçe "eşit değil" anlamına gelir.
*i*
"i" içeren herhangi birşeyle eşleşen bir joker
return
Herhangi bir argüman olmadan sadece geçerli fonksiyonun veya betiğin çalışmasını durdurmak anlamına gelir.
&&
mantıksal AND işlecidir. Sağdaki ifade, bu durumda return
, yalnızca soldaki ifade doğru ise değerlendirilir (yürütülür) . Pek çok programlama dilinde, a && b
bunun için bir yol var if a then b
- buna "kısa devre değerlendirmesi" denir ve kullandığınızda programlama öğretmenlerini çılgına çevirir: D
Söylediği gibi varsayabiliriz: bash etkileşimli bir kabukta açık değilse, o zaman hiçbir şey yapmayın.
Tüm işlevi bilmiyorum, ancak muhtemelen bir TTY'de bash açmanız durumunda, bu satırın altında ayarlanmış komutlar ve bayraklar vardır.
$-
ve*i*
etkileşimli modun olup olmadığını nasıl bulacağını bilmek için sabırsızlanıyorum