在子 shell 中调用时获取正常的 $PATH

在子 shell 中调用时获取正常的 $PATH

如何$PATH在子 shell 中调用该变量,以便获得在普通 shell 中得到的结果?

[ec2-user@ip-172-31-45-160 ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin

这是我$PATH在普通 shell 中的变量,但是当我在 shell 脚本中调用这个变量时,我得到:

/sbin:/bin:/usr/sbin:/usr/bin

我的目标是制作一个脚本,自动将其自身添加到用户的 bin 路径中(当然,检查文件是否已经存在,以免替换它并破坏某些内容),为此,我需要$PATH在脚本。

这是我的完整脚本。早期的尝试和测试中有很多工件,所以请不要理会它们:

#!/bin/bash

# This script will try to add itself to the user's path after being executed the first time

FILENAME=$(basename $0)
# echo $FILENAME

PATHVARS=$(echo $PATH)
NRPATHS=$(echo $PATHVARS | awk -F ':' '{print NF}')
# echo "$PATHVARS $NRPATHS"

echo $PATH
PATHLIST=$(echo $PATH | tr ':' ' ')
echo $PATHLIST

for word in $PATHLIST; do
#       echo "$word ---------------"
        if [[ -e "${word}/${FILENAME}" ]]; then
                echo "File ${word}/${FILENAME} already exists!"
        else
#               echo "Self copy successful: ${word}/${FILENAME}"
                cp -f ${FILENAME} ${word}/${FILENAME}
        fi
done

相关内容