PATH変数を複数行に分割

PATH変数を複数行に分割

ファイルのPATH変数は私が見ることができるようにかなり長いので、読みやすくするために複数行に分割しました。ここ。これが私が変えたものです/etc/profile

#  PATH="/usr/share/python-wheels:/usr/share/gcc/python/usr/lib/python3/dist-pa>
#  PATH="/usr/share/doc:/usr/lib/python3:/usr/lib/python3/dist-packages:/usr/lib/cups/backend:usr/lib/python3.11:/usr/src/python3.11:/sbin:/bin"

path+=(
/usr/local/bin
/usr/bin
/bin
/usr/local/games
/usr/games
/home/lm/local/pipx/venvs/esptool
/usr/share/python-wheels
/usr/share/gcc/python
/usr/lib/python3/dist-packages/pip/_vendor/pygments/lexers
/usr/share/doc
/usr/lib/python3
/usr/lib/python3/dist-packages
/usr/lib/cups/backend
/usr/lib/python3.11
/usr/src/python3.11
/sbin
/bin
)
export PATH

それから私は走った。

source ~/.profile

何もecho $PATH変わりませんでした。

root@debian:/home/lm# echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/lm/.local/bin:/root/.local/bin:/root/.local/bin:/root/.local/bin:/root/.local/bin:/root/.local/bin

root@debian:/etc/default# source /etc/profile
root@debian:/etc/default# echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/lm/.local/bin:/root/.local/bin

PATHは、XFCEが再起動または再起動された後もデフォルトのままです。

問題は何であり、新しいPATH設定が許可されるようにこの問題をどのように解決できますか?

私のシステムはDebian 12とXFCEです。

ベストアンサー1

まず、bashを使用するとpath問題になりません。 BashのみPATH。これで、読みやすくするためにシェル構成ファイルをフォーマットするには、次のようにします。

path_dirs=(
/usr/local/bin
/usr/bin
/bin
/usr/local/games
/usr/games
/home/lm/local/pipx/venvs/esptool
/usr/share/python-wheels
/usr/share/gcc/python
/usr/lib/python3/dist-packages/pip/_vendor/pygments/lexers
/usr/share/doc
/usr/lib/python3
/usr/lib/python3/dist-packages
/usr/lib/cups/backend
/usr/lib/python3.11
/usr/src/python3.11
/sbin
/bin
)

for path in "${path_dirs[@]}"; do
  PATH="$PATH:$path"
done
export PATH

path_dirsこれは、必要なものを格納する配列を作成し、配列を繰り返し、PATH各項目をPATH

ディレクトリにスペースが含まれている場合は、引用符で囲む必要があります。

path_dirs=(
...
"/some/path/with a space/"
...
)

また、名前に改行文字を含むディレクトリを追加することはできませんが、私が知っている限り、とにかくそれを行うことはできません。

pathmunge最後に、Red Hat / Fedoraシステムで提供されている同様の機能を使用したい場合があります。とにかく約20年間使ってきましたが、~/.profileとても便利です。

pathmunge () {
        if ! echo $PATH | /bin/grep -Eq "(^|:)$1($|:)" ; then
           if [ "$2" = "after" ] ; then
              PATH=$PATH:$1
           else
              PATH=$1:$PATH
           fi
        fi
}

この関数はパスにすでに何かがあるかどうかを確認し、そうでない場合は変数の先頭または末尾に追加しますPATH。関数をファイルに貼り付けて、~/.profile次を実行できます。

## add a directory to the beginning of the path (prepend)
pathmunge /some/dir after
## add a directory to the end of the path (append)
pathmunge /some/dir

つまり、次~/.profileのように変更できます。

for path in "${path_dirs[@]}"; do
  pathmunge "$path" after
done

おすすめ記事