BASH 无法添加到 $PATH

问题描述 投票:0回答:1

我正在尝试向 $PATH 添加新变量,但每次我尝试时,它都不会在 echo $PATH 中显示。

if echo "$PATH" | grep -q "$sciezka" ; then
        echo "Sciezka $sciezka is in the PATH"
        else
        export PATH=$PATH:$sciezka
        fi

我试过了

source ~/.bashrc
但是没用

当我使用时:

echo "$PATH:$sciezka"

测试,它工作正常,但测试后它不会留在 $PATH 中。

完整代码(更新为https://www.shellcheck.net/):

#!/bin/bash
pliczek=0
function jakasnazwa {
        plik=$1
        if [ -z "$plik" ]
        then
         echo "Podaj ścieżke pliku"
         read plik
         pliczek="$plik"
         touch $pliczek
        else
         pliczek="$plik"
         touch $pliczek
        fi

        if [ -f "zad1.sh" ]
        then
        echo "Plik zad1.sh istnieje"
        else
        echo "Plik zad1.sh nie istnieje"
        fi

        sciezka=$(pwd)

sciezka="$(pwd)"


        if echo "$PATH" | grep -q "$sciezka" ; then
        echo "Scieżka $sciezka znajduje się w PATH"
        else
         zmienna="$PATH:$sciezka"
        export PATH="$zmienna"
        fi

        if [[ -d 'katalog' ]]
        then
        rm -r 'katalog'
        mkdir 'katalog'
        else
        mkdir 'katalog'
        fi
        dir >> $pliczek
        mv $pliczek './katalog/'
}

jakasnazwa "$1"

linux bash
1个回答
0
投票

如果您尝试修改 PATH 值以便在执行测试的脚本中使用,那么您在上面定义的逻辑将正确地应用于该脚本本身内的任何后续逻辑。

如果您尝试修改 PATH 值用于从 GUI/脚本打开的任何终端/shell不必每次都在这些脚本/会话中插入上述逻辑),您需要合并.bashrc_local 脚本中的逻辑。该脚本的目的是捕获 .bashrc 之外的任何自定义环境逻辑,这可能会被操作系统更新破坏。

一旦附带条件,您需要确保您的匹配模式不允许可能的子字符串匹配,从而成为无效匹配。为此,您的

grep -q "$sciezka"

实际上应该是形式

grep -E -q "^${sciezka};|;${sciezka};|;${sciezka}$"
© www.soinside.com 2019 - 2024. All rights reserved.