Команда не найдена в zsh, но найдена в bash

Ответ от 2019 г. :Кажется, есть несколько реализаций клиентов V2, доступных в Интернете, opensource@github — одна из них. вот еще .

Судя по всему, существует кросс-платформенная -совместимость по крайней мере с Linux, Windows, Openwrt и Android. Наверное, тоже Мак.

4
19.05.2021, 15:32
1 ответ

Если ваш 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.


Когда не в режиме POSIX, например, при работе с именем sh, поскольку эта функция нарушает соответствие POSIX, поскольку PATH='~'предназначен для поиска команд в буквальном подкаталоге ~текущего рабочего каталога.

10
28.07.2021, 11:31

Теги

Похожие вопросы