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

sh/bash/dash/ksh/zsh等Shell脚本
回复
wxkj20
帖子: 26
注册时间: 2008-06-18 9:14
送出感谢: 0
接收感谢: 0

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

#1

帖子 wxkj20 » 2008-06-18 9:18

我要声明export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
但是不想写入bashrc或bashprofile里,单独写个文件
#!/bin/bash
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
但不好用,希望各位指点一下
头像
yaoms
帖子: 4953
注册时间: 2007-10-19 14:51
来自: 深圳
送出感谢: 0
接收感谢: 2 次

#2

帖子 yaoms » 2008-06-18 10:03

什么叫不好用?你想让它怎么样好用?和 .bashrc一样随着登录,运行?
Nothing 有事请发邮件到 yms541 AT gmail.com
alias 爱慕颇雷尔='mplayer'
wxkj20
帖子: 26
注册时间: 2008-06-18 9:14
送出感谢: 0
接收感谢: 0

#3

帖子 wxkj20 » 2008-06-18 10:14

是这样的,我生成了个动态库,放在了当前目录,每次程序执行的时候我都要打export 那句话,我想放进个脚本里面,但我写那个是不好用的,我很不明白,在终端里直接打那句话程序就可以执行,但放到我写那个脚本就提示照不到当前目录的库,所以想请教一下问题出在哪里怎么解决
头像
yaoms
帖子: 4953
注册时间: 2007-10-19 14:51
来自: 深圳
送出感谢: 0
接收感谢: 2 次

#4

帖子 yaoms » 2008-06-18 10:19

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 的環境變數所在的記憶區塊導入自己的環境變數區塊當中。

透過這樣的關係,我們就可以讓某些變數可以在相關的程序之間存在,以幫助自己更方便的操作環境喔!
上次由 yaoms 在 2008-06-18 10:28,总共编辑 1 次。
Nothing 有事请发邮件到 yms541 AT gmail.com
alias 爱慕颇雷尔='mplayer'
wxkj20
帖子: 26
注册时间: 2008-06-18 9:14
送出感谢: 0
接收感谢: 0

#5

帖子 wxkj20 » 2008-06-18 10:26

我明白你的意思,我现在想做的就是想让脚本在在当前有效,每次执行程序前我先执行脚本,不打export那么长的语句。不用每次开机后就生效,但是我的脚本执行了没效果,不能起到在当前终端打export那句话的作用,我不明白毛病出在哪里
头像
yaoms
帖子: 4953
注册时间: 2007-10-19 14:51
来自: 深圳
送出感谢: 0
接收感谢: 2 次

#6

帖子 yaoms » 2008-06-18 10:30

你要在 .bashrc中添加这样一句 :

代码: 全选

. /path/to/your/script
让 .bashrc 调用 你的变量设置脚本。
Nothing 有事请发邮件到 yms541 AT gmail.com
alias 爱慕颇雷尔='mplayer'
wxkj20
帖子: 26
注册时间: 2008-06-18 9:14
送出感谢: 0
接收感谢: 0

#7

帖子 wxkj20 » 2008-06-18 10:38

谢谢
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

#8

帖子 eexpress » 2008-06-18 10:40

要source呢。man吧。
● 鸣学
fuhuizn
帖子: 738
注册时间: 2006-01-06 22:55
系统: ubuntu
送出感谢: 0
接收感谢: 13 次
联系:

#9

帖子 fuhuizn » 2008-06-18 11:28

在脚本里运行程序应该就可以了,
export的作用范围只在脚本以及它的子进程内。
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
送出感谢: 0
接收感谢: 7 次
联系:

#10

帖子 BigSnake.NET » 2008-06-18 11:30

LD_LIBRARY_PATH 加上当前路径是个危险行为
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
nitingjimo
帖子: 108
注册时间: 2008-07-15 13:01
送出感谢: 0
接收感谢: 0
联系:

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

#11

帖子 nitingjimo » 2009-05-17 21:07

似懂非懂....
回复

回到 “Shell脚本”