標籤:shell bash linux shell
首先來看看變數的問題
[[email protected] ~]# dhh=1
[[email protected] ~]# echo $dhh
1
開一個子shell測試
[[email protected] ~]# bash
[[email protected] ~]# echo $dhh
沒有值
使用export方法
[[email protected] ~]# exit ----------退出子shell
exit
[email protected] ~]# export dhh
[[email protected] ~]# bash -----------建立子shell
[[email protected] ~]# echo $dhh
1
這樣我們就能說:export 能夠將本shell定義的變數傳遞給給子shell用
但是 子shell的變數能夠通過exprot講變數值傳遞給父shell嗎??
[[email protected] ~]# bash
[[email protected] ~]# dkk=1
[[email protected] ~]# export dkk
[[email protected] ~]# exit
exit
[[email protected] ~]# echo $dkk
沒有值
答案是:不行的。。。
要實現的話。。有下面幾個方法 來自 http://blog.csdn.net/dreamcoding/article/details/8519689
那麼子 shell 有什麼辦法可以向父 shell 傳遞自己的變數嗎?下面方法可以考慮:
通過一個中間檔案進行:
#!/bin/bash( subvar="hello shell" echo "$subvar" > temp.txt)read pvar < temp.txtecho $pvar運行輸出:$ sh subandp.shhello shell
通過命令替換:
#!/bin/bashpvar=`subvar="hello shell";echo $subvar`echo $pvar
-
運行輸出: ::
-
$ ./subandp.shhello shell
執行命令替換符(兩個反單引號)之間的命令也是在子 shell 來完成的。
使用具名管道:
#!/bin/bashmkfifo -m 777 npipe( subsend="hello world" echo "$subsend" > npipe & )read pread < npipeecho "$pread"exit 0
運行輸出:
[email protected]:~/shell$ ./var.shhello world
關於有名管道建立命令 mkfifo 可參考:http://www.groad.net/bbs/read.php?tid-3707.html
使用 here 文檔:
#!/bin/bashread pvar << HERE`subvar="hello shell"echo $subvar`HEREecho $pvar
運行輸出:
$ ./subandp.shhello shell
方法應該還有很多,這些方法的本質原理基於進程間的通訊。
再來看看 su 與 su - 切換使用者的區別
su 方法
[[email protected] ~]# useradd test
[[email protected] ~]# test1=1
[[email protected] ~]# su test
[[email protected] root]$ echo $test1
沒有值
然而使用export傳遞變數是可行的
[[email protected] ~]# export test=1
[[email protected] ~]# su test
[[email protected] root]$ echo $test
1
[[email protected] root]$ echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin -----環境變數與root的環境變數相同
再來看看 su - 方法
[[email protected] ~]# su - test
[[email protected] ~]$ echo $test
沒有值
[[email protected] ~]$ echo $test1
沒有值
[[email protected] ~]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/test/bin------------環境變數與root環境變數不同
綜合所訴: