zsh
を使用しています ubuntuでbat
のシンボリックリンクを作成しました そのように:
ln -s /usr/bin/batcat /home/user_name/.local/bin/bat
ls -l
を押す ~/.local/bin
から ショー:
lrwxrwxrwx 1 tux tux 15 May 19 13:47 bat -> /usr/bin/batcat
これで、任意のディレクトリから(~/.local/bin
でも) )、
bat
を実行した場合 、command not found: bat
。 ~/.local/bin
も実行しています 動作しません。ただし、./bat
を実行します (~/.local/bin
から )動作します。 batcat
を実行しています も機能します。
echo $PATH
~/.local/bin
であることを示しています パスにあります
ここで何がうまくいかない可能性がありますか?シンボリックリンクは機能しません、bat
単なる例です
P.S. bashでは、物事は期待どおりに機能しています
承認された回答:
PATH
の場合 実際には~/.local/bin
が含まれています 文字通りのチルダ文字で:それは機能しません。チルダをホームディレクトリに展開する必要があります。
たとえば、これらの行はいずれも、zsh、bash、またはその他のshのようなシェルでは正しいです:
PATH=~/.local/bin:$PATH
PATH=$PATH:~/.local/bin
PATH=~/.local/bin:"$PATH"
PATH="$PATH":~/.local/bin
export PATH="$HOME/.local/bin:$PATH"
export PATH="$PATH:$HOME/.local/bin"
~
のために機能します 単語の先頭、割り当ての等号の直後、または:
の直後にある場合は、ホームディレクトリに展開されます。 割り当ての右側にあります(この最後のルールの目的は、PATH
を設定するためのものです。 。
ただし、PATH="~/.local/bin:$PATH"
のような行 ~
なので、機能しません は二重引用符で囲まれていないため、PATH
の値は リテラル文字~
が含まれることになります 。このPATH
~
というディレクトリを参照します ホームディレクトリではなく、現在のディレクトリにあります。
Bash¹には~
という機能があります パスエントリの先頭にあるホームディレクトリとして解釈されます。したがって、PATH="~/.local/bin:$PATH"
部分的にbashで動作します。ただし、bash以外のプログラムがプログラムを起動する場合ではなく、bashから直接プログラムを実行する場合にのみ機能します。したがって、bashを使用する場合でも、リテラルの~
を入れないでください。 パスで、展開されていることを確認するか、$HOME
を使用します 代わりに。