0
我有一個腳本,它執行一些基本的PATH完整性檢查,並在~/.bash_profile
中輸入一行以獲取我的腳本,以便在根目錄PATH
中對腳本所做的更改是永久的跨重啓:root PATH的腳本在重新啓動後發生改變並永久反映
cat path_clean
#!/bin/bash
OLD_PATH=`echo $PATH`
OIFS=$IFS
IFS=:
for path in ${OLD_PATH}; do
[ -d "${path}" ] || continue
paths=("${paths[@]}" "${path}")
done
while read -r stat owner path; do
[ "${owner}${stat:5:1}${stat:8:1}" = 'root--' ] || continue
newpath="${newpath}:${path}"
done < <(stat -c "%A:%U:%n" "${paths[@]}" 2>/dev/null)
IFS=${OIFS}
NEW_PATH=${newpath#:}
export PATH=${NEW_PATH}
egrep "^[ ]*if.*fi;" ~/.bash_profile &> /dev/null
if [ $? -ne 0 ];
then
echo 'if [ -f /root/path_clean ]; then source /root/path_clean; fi;' >> ~/.bash_profile
fi
一切運行正常,當我運行該腳本第一次是這樣的:
./path_clean
. ~/.bash_profile
但腳本有一個問題。如果我多次執行. ~/.bash_profile
,那麼我會看到PATH變量中的值每次重複一次。
例如腳本執行之前我PATH
是:
[[email protected] ~]# echo $PATH
/usr/bin/X11:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/ulticom/diameter/bin:/apps/omni/bin
現在運行. ~/.bash_profile
後第一時間,一切正常:
[[email protected] ~]# ./path_clean
[[email protected] ~]# echo $PATH <--still same as original `PATH`, which is ok
/usr/bin/X11:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/ulticom/diameter/bin:/apps/omni/bin:/root/bin
[[email protected] ~]# . ~/.bash_profile <--now sourcing `.bash_profile`1st time
[[email protected] ~]# echo $PATH <--my script has changed `PATH` fine.
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/ulticom/diameter/bin:/apps/omni/bin
[[email protected] ~]# . ~/.bash_profile
[[email protected] ~]# echo $PATH <-- problem starts
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/ulticom/diameter/bin:/apps/omni/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/ulticom/diameter/bin:/apps/omni/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/ulticom/diameter/bin:/apps/omni/bin
[[email protected] ~]# . ~/.bash_profile
[[email protected] ~]# echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/ulticom/diameter/bin:/apps/omni/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/ulticom/diameter/bin:/apps/omni/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/ulticom/diameter/bin:/apps/omni/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/ulticom/diameter/bin:/apps/omni/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/ulticom/diameter/bin:/apps/omni/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/ulticom/diameter/bin:/apps/omni/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/ulticom/diameter/bin:/apps/omni/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/ulticom/diameter/bin:/apps/omni/bin
請建議什麼樣的變化,使腳本,以便使其工作正常並根除這個問題。
'path'和'newpath'都有這個問題。 –
所以你建議在我的腳本中的這一行之後:'export PATH = $ {NEW_PATH}',我保留一個'未設置PATH,NEW_PATH'或者我應該保留它作爲腳本中的最後一行? –
@ dig_123要麼'paths =(); newpath =「」在開始或在結束時取消設置。 (不要取消路徑!)我會去第一個選項,以防腳本出口 – Diego