Soru Kabuk komut dosyası işlevini içe aktarma


Merhaba SHELL komut dosyasında yeniyim. Aslında bir fonksiyonum var err() dosyada abc dosyalar ile değil .sh uzantılar basit bir dosyadır ancak #!/bin/bash

err () {
echo "${1}" >&2 
}

Şimdi farklı bir dosyada içe aktarıyorum xyz 

source abc
someFunction(){ 
err "Failed to back up"
}

İthalatı doğru bir yolu var mı?


21
2017-12-11 05:26


Menşei




Cevaplar:


Evet, yukarıda bahsettiğin gibi yapabilirsin: . FILENAME

Dosyanın bitmesi gerekmiyor .sh


23
2017-12-11 05:29





Bu iyi, biraz daha ipucu:

  1. İşlevler için bir adlandırma kuralı kullanın; f_, Örneğin f_err. İşlev çağrıları diğer komutlar kadar farklı görünmüyor, bu okuyucuya bir ipucu. Aynı zamanda isim çarpışma olasılığını da azaltır.

  2. Sadece okuma erişimine ihtiyacınız var ve buna ihtiyacınız yok #!/bin/bash (sadece bir yorum).

  3. Bash'de, işlev ayrıştırmadan önce bazı seçeneklerin ayarlanması gerekir. Örneğin, shopt -s extglob uzatılmış globbing kullanıyorsa, fonksiyonun önünde ve dışında yapılmalıdır. Bunu işlevin içine koymak çok geç.

  4. Bash, FPATH ortam değişkenini veya otomatik yüklemeyi desteklemez (Korn kabuğu yaptığı gibi).


4
2017-12-11 08:21





Gerek ihracat yeni oluşturulan fonksiyonlar

sonunda abc bunu ekle:

export -f err

2
2017-12-11 10:38



Fonksiyonu bir alt kabuğunda (bash'ın başka bir örneğini çalıştırarak başlatılmış) kullanılabilir hale getirmek için dışa aktarmanız yeterlidir. Dosyayı tedarik ettikten sonra, orada tanımlanan herhangi bir işlev mevcut kabukta bulunacaktır. - chepner