分页: 1 / 1

[问题]export 不能单独写个脚本么

发表于 : 2008-06-18 9:18
wxkj20
我要声明export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
但是不想写入bashrc或bashprofile里,单独写个文件
#!/bin/bash
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
但不好用,希望各位指点一下

发表于 : 2008-06-18 10:03
yaoms
什么叫不好用?你想让它怎么样好用?和 .bashrc一样随着登录,运行?

发表于 : 2008-06-18 10:14
wxkj20
是这样的,我生成了个动态库,放在了当前目录,每次程序执行的时候我都要打export 那句话,我想放进个脚本里面,但我写那个是不好用的,我很不明白,在终端里直接打那句话程序就可以执行,但放到我写那个脚本就提示照不到当前目录的库,所以想请教一下问题出在哪里怎么解决

发表于 : 2008-06-18 10:19
yaoms
wxkj20 写了:是这样的,我生成了个动态库,放在了当前目录,每次程序执行的时候我都要打export 那句话,我想放进个脚本里面,但我写那个是不好用的,我很不明白,在终端里直接打那句话程序就可以执行,但放到我写那个脚本就提示照不到当前目录的库,所以想请教一下问题出在哪里怎么解决
你要好好理解一下 linux shell 里 环境变量的作用范围。 你把这个export 语句 写进一个脚本,执行时的确是有用的,但是它的作用范围是 这个脚本的 范围之内(当前shell的一个子shell)和这个脚本的 "当前shell的子shell的子shell" ,而不会影响到你的登录 shell(当前shell)..呵呵,我也感觉说的像绕口令。不知道你能不能懂。

你想让这个脚本影响到你的当前登录shell,就必须将它加入 到 .bashrc 中。或者在 .bashrc中调用。

看看鸟哥的解释。呵呵

代码: 全选

變數的有效範圍
蝦密??變數也有使用的『範圍』?沒錯啊~我們在上頭的 export 指令說明中,就提到了這個概念了。如果在跑程式的時候,有父程序與子程序的不同程序關係時, 則『變數』可否被引用是 export 有關。被 export 後的變數,我們可以稱他為『環境變數』! 環境變數可以被子程序所引用,但是其他的自訂變數內容就不會存在於子程序中。也就是說: 我們自行設定的變數,只在目前這個 shell 環境當中存在, 在子程序中將不會存在此一變數。除非使用 export 將自訂變數變成環境變數。

其實除了 shell 的父、子程序外,在腳本( scripts )的編寫當中,由於有的軟體會使用到 2 個以上的 scripts 做為一個完整的套件!也就是說,假如你有兩支程式,一支為 scripts1.sh 以及 scripts2.sh ,而 scripts2.sh 會去引用 scripts1.sh 的變數,這個時候,嘿嘿!你在 scripts1.sh 當中設定的變數請『千萬記得以 export 設定』, 否則你的變數將無法在兩個 scripts 之間互相被引用喔!當這個 scripts 執行完畢之後,剛剛在 scripts 當中設定的變數也就『失效了!』。

其實,要瞭解不同程序之間變數的變換,應該要先瞭解『程序』的概念比較好, 但是我們還沒有講到.....沒關係~等你念到程序章節後,還可以再回來好好的看一看。 基本上,環境變數可以讓子程序繼續引用的原因,是因為:

    * 當啟動一個 shell ,作業系統分配一記憶區塊給 shell 使用,此區域之變數可以讓子程序存取;
    * 利用 export 功能,可以讓變數的內容寫到上述的記憶區塊當中(環境變數);
    * 當載入另一個 shell 時 (亦即啟動子程序,而離開原本的父程序了),子 shell 可以將父 shell 的環境變數所在的記憶區塊導入自己的環境變數區塊當中。

透過這樣的關係,我們就可以讓某些變數可以在相關的程序之間存在,以幫助自己更方便的操作環境喔!

发表于 : 2008-06-18 10:26
wxkj20
我明白你的意思,我现在想做的就是想让脚本在在当前有效,每次执行程序前我先执行脚本,不打export那么长的语句。不用每次开机后就生效,但是我的脚本执行了没效果,不能起到在当前终端打export那句话的作用,我不明白毛病出在哪里

发表于 : 2008-06-18 10:30
yaoms
你要在 .bashrc中添加这样一句 :

代码: 全选

. /path/to/your/script
让 .bashrc 调用 你的变量设置脚本。

发表于 : 2008-06-18 10:38
wxkj20
谢谢

发表于 : 2008-06-18 10:40
eexpress
要source呢。man吧。

发表于 : 2008-06-18 11:28
fuhuizn
在脚本里运行程序应该就可以了,
export的作用范围只在脚本以及它的子进程内。

发表于 : 2008-06-18 11:30
BigSnake.NET
LD_LIBRARY_PATH 加上当前路径是个危险行为

Re: [问题]export 不能单独写个脚本么

发表于 : 2009-05-17 21:07
nitingjimo
似懂非懂....