vim backfunc
#!/bin/sh
_CODE="comet"
_FULLBACKUP="yes"
_LOGFILE="/logs/backup/"
_DEVICE="/dev/rmt/On"
_INFORM="yes"
_PRINT_STATS="yes"
#!/bin/sh
if [ -r backfunc ];then
. backfunc ########################################注意:.空格 檔案名稱 或者 source backfunc
#######################export是不行的
else
echo "$`basename $0` cannot locate backfunc file"
fi
echo -n " Enter the code name:"
read CODE
if [ "${CODE}" != "${_CODE}" ];then
echo "worong code...exiting..will use defaults"
echo $CODE
echo $_CODE
# exit 1
fi
echo "Ther environment config file reports"
echo "Full Backup Required :$_FULLBACKUP"
echo "The Device To Backup to is :$_DEVICE"
echo "You Are to be informed by Mail:$_INFORM"
echo "A Statistic report to be printed :$_PRINT_STATUS"
總結:sub-shell有自己的環境空間,他自己的環境中增加或修改的變數在sub-shell推出
時也隨之銷毀,不會帶回到父進程中。pipeline和(list)都會建立sub-shell,要
注意呀!
你的sh-bin中
./sh-env
一行可以改成
. sh-env
或
source sh-env
使他在當前shell中運行。
雖然在sh-env中export了sh_var,它的效果只會影響到sh-env本身及其子shell,你在sh-bin中的“./sh-env”這行的本質是新開一個sh來執行sh-env,結束後退回到執行sh-bin的sh中,具有遺傳性質的是前邊那個執行sh-env的sh,而不是執行sh-bin的sh
在sh-bin中不是沒有輸出sh_var,只是輸出了空值