Shell Değişken Tanımlama ve Kaldırma
Linux’da değişkenleri, key-value çiftlerini temsil eden dizeler olarak uygulanır. Birden çok değer aktarılırsa, bunlar genellikle iki nokta üst üste (:) karakterleriyle ayrılır. Her çift genellikle şuna benzer:
KEY=value1:value2:...
Değer boşluk içeriyorsa, tırnak kullanılır:
KEY="value with spaces"
Shell değişkeni oluşturmak için komut satırına değişkeni ve değerini tanımlamamız yeterlidir.
TEST_SHELL_VAR=merhaba
TEST_SHELL_VAR değişkeni sadece mevcut kabukta görüntülenir. Alt kabuk geçildiğinde değişken bu alt kabuğa aktarılmaz.
Öncelikle $$ değişkeni ile mevcut shell PID’sini görüntüleyelim.
alikemal@pop-os:~$ echo $$
alikemal@pop-os:~$ 37791
Değişkenimizi tanımlayalım:
alikemal@pop-os:~$ TEST_SHELL_VAR=merhaba
Printenv komutu değişkenimizi görüntülemiyor. Çünkü bu komut sadece ortam değişkenlerini görüntüleyebilir.
alikemal@pop-os:~$ printenv TEST_SHELL_VAR
alikemal@pop-os:~$
Fakat echo komutu ile görüntüleyebiliriz.
alikemal@pop-os:~$ echo $TEST_SHELL_VAR
merhaba
Set komutu ile listeleyebilirken, env komutu ile listeleyemiyorum.
alikemal@pop-os:~$ set | grep TEST_SHELL_VAR
TEST_SHELL_VAR=merhaba
alikemal@pop-os:~$ env | grep TEST_SHELL_VAR
alikemal@pop-os:~$
Bellekte tutulan değişkenler arasıında da görüntüleyemiyorum.
alikemal@pop-os:~$ cat /proc/self/environ | tr '\0' '\n' | grep TEST_SHELL_VAR
alikemal@pop-os:~$
Alt shell’e geçelim:
alikemal@pop-os:~$ bash
alikemal@pop-os:~$ echo $$
alikemal@pop-os:~$ 42040
Shell değişkenleri alt shell’e aktarılamadığı için görüntülenemeyecektir.
alikemal@pop-os:~$ echo $TEST_SHELL_VAR
alikemal@pop-os:~$ set | grep TEST_SHELL_VAR
alikemal@pop-os:~$
Ortam Değişkenler Yaratmak
Ortam değişkenleri export komutu ile tanımlanır.
export TEST_ENV_VAR=selam
Ortam değişkeni olduğu için printenv ve env ile de listelenmektedir.
alikemal@pop-os:~$ echo $TEST_ENV_VAR
selam
alikemal@pop-os:~$ printenv TEST_ENV_VAR
selam
alikemal@pop-os:~$ set | grep TEST_ENV_VAR
TEST_ENV_VAR=selam
_=TEST_ENV_VAR
alikemal@pop-os:~$ env | grep TEST_ENV_VAR
TEST_ENV_VAR=selam
Alt shell’e geçelim.
alikemal@pop-os:~$ bash
alikemal@pop-os:~$ echo $$
42141
Ortam değişkenleri olduğundan alt shell’lerde de listenecektir.
alikemal@pop-os:~$ echo $TEST_ENV_VAR
selam
alikemal@pop-os:~$ printenv TEST_ENV_VAR
selam
Bellekte tutulan değişkenler arasından da çağıralım.
alikemal@pop-os:~$ cat /proc/self/environ | tr '\0' '\n' | grep TEST_ENV_VAR
alikemal@pop-os:~$ selam
Bir prosesin ortam değişkenleri bellekte tutulur ve dosyalarda saklanmaz. Prosesin kendi hafızasında depolanırlar ve alt shell’ler de aktarıldıkları yer burasıdır.
Fakat login olduğumuz oturumu kapattığımızda veya login olmadan açtığımı terminali kapattığımızda ortam değişkenleri de bellek hafızasından silinmektedirler. Bu durumda değişkeni bir yapılandırma dosyasında tanımlamamız gerekir.
Oturum Açarken Ortam Değişkenleri Ayarlama
Bir kullanıcı yeni bir shell başlattığında kullanıcıya özel ortam hazırlanması için shell bazı konfigürasyon dosyalarını okur. Bu dosyalara başlangıç (startup) dosyaları denir.
Bash shell, oturumun nasıl başlatıldığına bağlı olarak farklı yapılandırma dosyalarını okur. Shell’in nasıl başlatıldığına bağlı olarak okuduğu çok sayıda yapılandırma dosyası nedeniyle bu aslında ilk başta göründüğünden daha karmaşıktır. Ve kullandığınız shell’in türüne ve versiyonuna göre değişebilir. Doğru sırayı ve dosyayı bulmak için kullandıınız shell^in yardım sayfasından yararlanabilirsiniz.
Doğru dosyayı bulduktan sonra dosyayı açınız:
vi ~/.bashrc
Tanımlamak istediğiniz değişkeni export komnutu başında olacak şekilde giriniz.
export VARNAME=value
Değişkenin etkili olması için muhtemelen shell oturumunu veya terminali programınızı tekrar başlatmanız gerekecektir. Bunu yapmamak için yaptığınız tanımın geçerli olması için source komutunu kullanabilirsiniz.
source ~/.bashrc
BONUS: Öte yandan env, bir dizi değişken tanımını aşağıdaki gibi bir komuta aktararak programların çalıştığı ortamı değiştirmenize olanak tanır:
env TZ=MST7MDT date
Değişken kaldırmaexport -n ile ortam değişkeninden kaldırabiliriz. Fakat shell değişkeni olarak var olmaya devam eder.
export -n TEST_VAR
Hem shell hem de ortam değişkeni olarak kaldırmak için unset kullanılmalıdır.
unset TEST_VAR