root“PATH”的脚本更改并在重新启动后永久反映

时间:2015-06-29 19:31:20

标签: linux bash path environment-variables

我有一个脚本可以执行一些基本的根路径完整性检查,并在var dNetRate = cmd.ExecuteScalar(); 中输入一行来源我的脚本,以便更改我在root ~/.bash_profile中创建的脚本是永久性的重新启动:

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 ,那么我每次都会看到PATH变量中的值重复。

例如,在执行脚本之前,我的. ~/.bash_profile是:

PATH

现在第一次运行[root@labeir1 ~]# 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

请建议在脚本中进行哪些更改,以使其正常工作并消除此问题。

1 个答案:

答案 0 :(得分:1)

我的猜测是你需要在使用之前清除newpath。否则,它将保留最后source命令留下的值。