2010-04-27 1 views
2

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

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

Запуск clean в терминале работает, как и ожидалось, в том, что она выводит все файлы в/TMP /. Позже, однако, пытаясь любой команды - например, Ls - производит это:

zsh: command not found: ls 

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

+0

Этот скрипт ничего не печатает, он просто создает функцию. Пожалуйста, сообщите конкретные шаги, которые вы предпримете для воспроизведения ошибки. – wRAR

+0

После создания функции я просто запускаю 'clean' в zsh. Я обновлю сообщение, чтобы попытаться сделать это более ясным. – ABach

+2

Невозможно воспроизвести здесь. – wRAR

ответ

4

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

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

local_path=/tmp  
for i in ${local_path}/*; do 
    echo $i 
done 
+0

, примите ваш ответ. Я подозреваю, что вы переписываете переменную PATH. что очень важно. используйте другой, который еще не находится в env. Например, CLEAN_PATH не должен иметь такой эффект. – xenoterracide

+0

О, мой ... насколько это очевидно. Спасибо. :) – ABach

+0

Также - я могу только принять свой собственный ответ за два дня ... – ABach

1

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

0

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

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