GNU/Linux >> Linux の 問題 >  >> Linux

コマンドはZshで見つかりませんが、Bashで見つかりましたか?

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を使用します 代わりに。


Linux
  1. サブスクリプション マネージャー:コマンドが見つかりません

  2. id:コマンドが見つかりません

  3. w:コマンドが見つかりません

  1. df:コマンドが見つかりません

  2. du:コマンドが見つかりません

  3. rm:コマンドが見つかりません

  1. mv:コマンドが見つかりません

  2. bash sh - コマンドが見つかりません

  3. -bash とは:!:イベントが見つかりません