linux

Shell Değişken Tanımlama ve Kaldırma

Jan 3, 2021 2 min

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

Your email address will not be published. Required fields are marked *