我正在尝试向 $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"
如果您尝试修改 PATH 值以便在执行测试的脚本中使用,那么您在上面定义的逻辑将正确地应用于该脚本本身内的任何后续逻辑。
如果您尝试修改 PATH 值用于从 GUI/脚本打开的任何终端/shell(不必每次都在这些脚本/会话中插入上述逻辑),您需要合并.bashrc_local 脚本中的逻辑。该脚本的目的是捕获 .bashrc 之外的任何自定义环境逻辑,这可能会被操作系统更新破坏。
一旦附带条件,您需要确保您的匹配模式不允许可能的子字符串匹配,从而成为无效匹配。为此,您的
grep -q "$sciezka"
实际上应该是形式
grep -E -q "^${sciezka};|;${sciezka};|;${sciezka}$"