Shell – Script Çalıştırma – Ortam Değişkenlerini Set Etmek

lifeinbeta@lifeinbeta:~/CSWORKS/C/soexample$ set LD_LIBRARY_PATH = /opt/lib:$LD_LIBRARY_PATH
lifeinbeta@lifeinbeta:~/CSWORKS/C/soexample$ echo $LD_LIBRARY_PATH

yaptım, ama olmadı, çünkü;

Shells and Shell Scripts yazısında açıklandığı üzere:

Running Scripts kısmında;

Bir Shell Script’ini çalıştırmak için üç farklı yol vardır:

Direct Execution: Bir Shell Script‘ini çalıştırabilmek için en basit yol, chmod ile text file‘ı executable yapmaktır. Bundan sonra, script, eğer current working directory‘de ise ya da shell‘in PATH‘inde tanımlı ise, adı yazılarak çalıştırılabilir.

Bir script çalıştırıldığında, yeni bir shell yaratır ve bu yeni shell‘de script içinde belirtilmiş olan her bir komutu sırayla çalıştırır. Script‘in sonuna gelindiğinde, yeni shell kapanır. Yeni shell’in script dolayısıyla sistemde yaptığı değişiklikler, shell sonlandığında kaybolur.

Shell Execution: Bir script’i yeni shell context’i içinde çalıştırmanın diğer yolu, shell’i script’i parametre olarak verip çalıştırmaktır. Bu aslında Direct Execution‘dur. Doğrudan, sh‘ı çalıştırarak, sh options değiştirilebilir.

csh -x change şeklinde çalştırıldığında, çalışan komutlar da output‘ta gösterilir.

source Execution: Bir script‘i mevcut shell’de çalıştırabilmek için, internal shell command olan source kullanılır. Çalıştırma, mevcut shell’in context‘inde olduğu için, script‘in shell’de yaptığı değişiklikler, shell sonlanıncaya kadar durur.

Burada, her shell‘in bir child process olduğu ve scope’u olduğu anlatılıyor. Benim karşılaştığım problem ise, aslında, tam olarak bununla ilgili değil ama, sistem geneli ortam değişkenleri scope‘u, environment scope – yani kısaca Environment ile ilgili.

Yukarıda yaptığım shell işlemlerinde, öncelikle bir terminal açmıştım. Terminal, bir shell başlattı. Bu yeni shell‘de yazmış olduğum, set komutu bir ortam değişkenini değiştirdi. Yeni bir terminal, yani shell açıp bu ortam değişkenini yazdırdığımda değerinin değişmediğini gördüm.

Export

A – Bourne Shell mark for export flag‘de belirtildiği gibi:

Bir değişkeni ortam – environment‘da bulundurabilmek için, o değişkeni explictly export etmek gerekir ki diğer programlar da onu bulabilsin.

Burada ayrıca,

Bunu yapmanın bir diğer yolu, set‘i -a option‘u ile birlikte kullanmaktır:
set -a
Bu yapıldığında, değiştirilen ya da yaratılan değişken export edilir.

Bu işlemlerin ve export‘un sebebi, UNIX – MAN Sayfaları ile Dosya Okuma-Arama Komutları ve Ortam Değişkenleri yazısında yazıyor.

Ayrıca, Environment Variables‘a bakılabilir.

Yukarıdaki anlatılanlardan anlaşılacağı gibi:

lifeinbeta@lifeinbeta:~/CSWORKS/C/soexample$ set LD_LIBRARY_PATH = /opt/lib:$LD_LIBRARY_PATH
lifeinbeta@lifeinbeta:~$export LD_LIBRARY_PATH
lifeinbeta@lifeinbeta:~/CSWORKS/C/soexample$ echo $LD_LIBRARY_PATH

yazmalıydım.

Yukarıdaki, shell‘de script çalıştırma yöntemlerinden ilkini kullandım. export ile ortam değişkenini değiştirdim. Ancak, açık olan shell, yani child process sonlanana kadar geçerli olacaktır. Bu yüzden her defasında bunu set etmek yerine,

Uygun login dosyası – GNU Bash Shell için .bash_profile kullanılarak her oturum için LD_LIBRARY_PATH otomatik olarak set edilebilir.

.bashrc‘de şunu yazdım:

export LD_LIBRARY_PATH=/opt/lib:$LD_LIBRARY_PATH

Bunun için;

lifeinbeta@lifeinbeta:~/CSWORKS/C/soexample$ vim ~/.bashrc
lifeinbeta@lifeinbeta:~/CSWORKS/C/soexample$ source ~/.bashrc
lifeinbeta@lifeinbeta:~/CSWORKS/C/soexample$ printenv LD_LIBRARY_PATH
/opt/lib:

işlemlerini yaptım. En son,

.bashrc‘de şunlar yazılıydı:

lifeinbeta@lifeinbeta:~$ cat .bashrc
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk
export PATH=$PATH:$JAVA_HOME/bin:~/play-1.1.1
export LD_LIBRARY_PATH=/opt/lib:$LD_LIBRARY_PATH
About these ads

Leave a comment

Filed under Shell, UNIX

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s