GNU/Linux >> Belajar Linux >  >> Linux

Perintah Tidak Ditemukan Di Zsh, Tetapi Ditemukan Di Bash?

Saya menggunakan zsh di ubuntu dan saya membuat symlink untuk bat seperti ini:

ln -s /usr/bin/batcat /home/user_name/.local/bin/bat

menekan ls -l dari ~/.local/bin menunjukkan:

lrwxrwxrwx 1 tux tux 15 May 19 13:47 bat -> /usr/bin/batcat

Sekarang dari direktori manapun (bahkan di ~/.local/bin ),

Jika saya menjalankan bat , saya mendapatkan command not found: bat . Juga menjalankan ~/.local/bin tidak bekerja. Namun, menjalankan ./bat (dari ~/.local/bin ) bekerja. Menjalankan batcat juga berfungsi.

echo $PATH menunjukkan bahwa ~/.local/bin ada di jalan

Apa yang bisa salah di sini? tidak ada symlink yang berfungsi, bat hanyalah sebuah contoh

P.S. Di bash, semuanya berfungsi seperti yang diharapkan

Jawaban yang Diterima:

Jika PATH . Anda sebenarnya berisi ~/.local/bin dengan karakter tilde literal:itu tidak akan berhasil. Tilde perlu diperluas ke direktori home Anda.

Misalnya, salah satu dari baris ini benar di zsh, bash, atau shell mirip sh lainnya:

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"

Mereka bekerja karena ~ diperluas ke direktori home saat berada di awal kata, tepat setelah tanda sama dengan dalam tugas, atau segera setelah : di sisi kanan tugas (tujuan aturan terakhir ini justru untuk kenyamanan pengaturan PATH ).

Tapi baris seperti PATH="~/.local/bin:$PATH" tidak akan berfungsi, karena ~ tidak diperluas dalam tanda kutip ganda, jadi nilai PATH akhirnya mengandung karakter literal ~ . PATH ini mereferensikan direktori bernama ~ di direktori saat ini, bukan direktori home Anda.

Bash¹ memiliki fitur di mana ~ ditafsirkan sebagai direktori home di awal entri jalur. Jadi PATH="~/.local/bin:$PATH" sebagian berfungsi di bash. Namun, ini hanya berfungsi saat Anda menjalankan program dari bash secara langsung, bukan saat program selain bash sendiri yang memulai program. Jadi, meskipun Anda menggunakan bash, jangan tulis ~ . secara literal di jalur, pastikan itu diperluas atau gunakan $HOME sebagai gantinya.


Linux
  1. [Memperbaiki] bash:Sudo:perintah tidak ditemukan

  2. ifrename:perintah tidak ditemukan

  3. id:perintah tidak ditemukan

  1. w:perintah tidak ditemukan

  2. df:perintah tidak ditemukan

  3. du:perintah tidak ditemukan

  1. Perintah Tidak Ditemukan di Bash Tetap

  2. Sudo:Tidak Benar:Perintah Tidak Ditemukan?

  3. bash sh - perintah tidak ditemukan