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,
chmodile text file‘ı executable yapmaktır. Bundan sonra, script, eğer current working directory‘de ise ya da shell‘inPATH‘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 optionsdeğiştirilebilir.
csh -x changeşeklinde çalştırıldığında, çalışan komutlar daoutput‘ta gösterilir.source Execution: Bir script‘i mevcut shell’de çalıştırabilmek için, internal shell command olan
sourcekullanı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-aoption‘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