zsh: команда не найдена: ls - PullRequest
       30

zsh: команда не найдена: ls

3 голосов
/ 27 апреля 2010

У меня довольно странная проблема с zsh. Когда я запускаю свою оболочку, все - функции, переменные среды, псевдонимы и т. Д. - все работает нормально. Я создал следующую функцию и получил ее в zsh:

clean()
{
    path=/tmp    
    for i in ${path}/*; do
      echo $i
    done
}

Запуск clean в терминале работает должным образом, поскольку он распечатывает все файлы в / tmp /. Однако затем попытка любой команды - например, ls - выдает следующее:

zsh: command not found: ls

У меня есть несколько других функций, которые прекрасно работают, что заставляет меня поверить, что каким-то образом этот цикл вызывает проблему. Во всяком случае, это очень расстраивает, и я искренне оценил бы глаза сообщества. Спасибо!

Ответы [ 3 ]

5 голосов
/ 28 апреля 2010

Проблема заключается в назначении переменной path - поскольку zsh имеет эту переменную зарезервированной (в дополнение к PATH), ее перезапись исключает возможность для оболочки найти любую команду.

Правильный ответ, конечно, заключается в использовании переменной, отличной от $path:

local_path=/tmp    
for i in ${local_path}/*; do
  echo $i
done
1 голос
/ 28 апреля 2010

Полагаю, она перезаписывает переменную path, которая используется для поиска команд Вот почему он больше не находит команды.

0 голосов
/ 18 апреля 2012

Я копался часами, чтобы найти это снова. Zsh предлагает хороший прием для удаления дубликатов из переменных типа PATH, немного не в тему, но может быть полезным:

typeset -T PYTHONPATH pythonpath
typeset -U pythonpath
  1. первая строка связывает строку PYTHONPATH с двоеточием в массиве zsh
  2. второй удалить дубликаты
...