2013-10-27 30 views
9

Başhekimden bir ortam değişkeni olan bir dosyaya kaynak oluşturmaya çalışıyorum ama işe yaramıyor.Bash komut dosyasından dosya nasıl kaynaklanır

Bu, ~/scripts/test.sh numaralı belgede bulunan (test.sh) adlı dizinin içeriğidir.

#!/bin/bash 
FILE_NAME=/tmp/source_file 
touch $FILE_NAME 
echo "export TEST=\"test\"" > $FILE_NAME 
source $FILE_NAME 

Sonra my ~/.bashrc içinde alias kullanın.

alias testScript=~/scripts/test.sh 

Ama senaryoyu testScript kullandığınızda, bu ortam değişkeni set vermedi.

+0

"Bunun ortam değişkeni set vermedi" demek istiyorsunuz ne olabilir ? Beklenen sonucun nedir? –

+0

Echo $ TEST'i denediğimde herhangi bir değeri göremiyorum – franki3xe

+0

'/ tmp/source_file 'dosyası beklediğinizi içeriyor mu? –

cevap

9

Ortam değişkenleri yalnızca işlem ağacında aşağı akış yönünde akar.

Bir bash sürecine testScript tip

, bir çocuğun süreç ve execs /bin/bash ya da her neyse #!

tarafından değişkenleri ayarlamak Herhangi ortam ayarlanır çocuk süreciyle sadece orada kalır oluşturur. Dışa aktarma, değişkenlerin, bu çocuktan doğabilecek ek torunlara (o çocuğun çocukları) kopyalanmasına neden olur.

Hiçbir şey bir ebeveyne geri kopyalanamaz. Dosyayı çalıştırmak yerine kaynak kullanmanız gerekir. Jonathan'ın cevabını görün.

Sık kullandığınız enviornment değişkenlerini ayarlamak için ~/.bashrc veya ~/.login dosyalarını düzenlemeyi deneyebilirsiniz.

bash adresindeki export ürününün açıklaması için https://superuser.com/q/153371 ve https://superuser.com/questions/18988/difference-between-a-b-and-export-a-b-in-bash'a da bakın.

alias testScript=". ~/scripts/test.sh" 

dosyasını kaynak:

9

Sen kullanmak gerekir. Ya da 'u . yerine kullanabilirsiniz, ancak C kabuklarını sevmiyorum, bu yüzden source gibi C kabuk notalarını kullanmıyorum. diğer yöntemlerden

+0

Bu tam olarak ihtiyacım olan şeydi - teşekkürler. Upvoted –

3

Yok, kadar this tutorial sayesinde buldum [vb ... . ./path/to/file, takma, vs source /path/to/file] benim için çalıştığını kullanarak:

yerine

#!/usr/bin/env bash shebang Daha basit bilgi için #!/usr/bin/env bir argümanın tercümana geçmesine izin verin, buradaki anahtar buradadır - daha fazla bilgi için bkz. this document. Her halükarda

, herhangi bir biçimde kaynak komutları sizin için çalışıyor değilse, sizin shebang kontrol etmeyi deneyin, sorun :)

İlgili konular