Temel olarak iki seçeneğiniz vardır:
export TESTVARIABLE
2. betiği çalıştırmadan önce değişkeni bir ortam değişkeni ( ) yapın.
- 2. komut dosyasını kaynaklayın, yani
. test2.sh
aynı kabukta çalışacaktır. Bu, diziler gibi daha karmaşık değişkenleri kolayca paylaşmanıza izin verir, ancak diğer komut dosyasının kaynak kabuğundaki değişkenleri değiştirebileceği anlamına gelir.
GÜNCELLEME:
export
Bir ortam değişkeni ayarlamak için kullanmak için, varolan bir değişkeni kullanabilirsiniz:
A=10
# ...
export A
Bu, hem çalışmak gerektiğini bash
ve sh
. bash
ayrıca şu şekilde birleştirilmesine izin verir:
export A=10
Bu benim de çalışır sh
(ki olur bash
, echo $SHELL
kontrol etmek için kullanabilirsiniz ). Ama bunun hepsinde çalışacağına inanmıyorum, bu sh
yüzden güvenli oynamak ve onları ayırmak en iyisidir.
Bu şekilde dışa aktardığınız değişkenler yürüttüğünüz komut dosyalarında görünür olacaktır, örneğin:
kül:
#!/bin/sh
MESSAGE="hello"
export MESSAGE
./b.sh
b.sh:
#!/bin/sh
echo "The message is: $MESSAGE"
Sonra:
$ ./a.sh
The message is: hello
Bunların her ikisi de kabuk komut dosyaları olması da sadece rastlantısaldır. Ortam değişkenleri yürüttüğünüz herhangi bir işleme geçirilebilir, örneğin python kullandıysak şöyle görünebilir:
kül:
#!/bin/sh
MESSAGE="hello"
export MESSAGE
./b.py
b.py:
#!/usr/bin/python
import os
print 'The message is:', os.environ['MESSAGE']
kaynak sağlama:
Bunun yerine şöyle kaynak yapabiliriz:
kül:
#!/bin/sh
MESSAGE="hello"
. ./b.sh
b.sh:
#!/bin/sh
echo "The message is: $MESSAGE"
Sonra:
$ ./a.sh
The message is: hello
Bu, az çok b.sh
doğrudan içeriği alır ve aynı kabukta yürütür . Değişkene erişmek için dışa aktarmamız gerekmediğine dikkat edin. Bu, sahip olduğunuz tüm değişkenleri dolaylı olarak paylaşır ve diğer komut dosyasının kabuktaki değişkenleri eklemesine / silmesine / değiştirmesine izin verir. Tabii ki, bu modelde her iki komut dosyanız da aynı dilde ( sh
veya bash
) olmalıdır. İletileri ileri geri nasıl iletebileceğimize bir örnek vermek için:
kül:
#!/bin/sh
MESSAGE="hello"
. ./b.sh
echo "[A] The message is: $MESSAGE"
b.sh:
#!/bin/sh
echo "[B] The message is: $MESSAGE"
MESSAGE="goodbye"
Sonra:
$ ./a.sh
[B] The message is: hello
[A] The message is: goodbye
Bu eşit derecede iyi çalışıyor bash
. Ayrıca, diziler veya ilişkilendirilebilir diziler gibi bir ortam değişkeni olarak ifade edemediğiniz (en azından sizin parçanızda ağır bir kaldırma olmadan) daha karmaşık verileri paylaşmanızı kolaylaştırır.