2010-04-27 260 views
2

我對zsh有一個相當奇怪的問題。當我啓動我的shell時,一切 - 函數,環境變量,別名等 - 都工作正常。我創建了以下功能和zsh的來源是:zsh:找不到命令:ls

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

在終端運行clean按預期工作,因爲它打印出的所有文件在/ tmp /。隨後,然而,試圖任何命令 - 例如,LS - 產生這樣的:

zsh: command not found: ls 

我有幾個其他的工作就好了,這使我相信,不知何故,這個循環是造成問題的功能。無論如何,這是非常令人沮喪的,我會真誠地感謝社區的眼睛。謝謝!

+0

此腳本不會打印任何內容,它只是創建一個函數。請告訴您重現錯誤的確切步驟。 – wRAR 2010-04-27 19:16:43

+0

創建函數後,我簡單地在zsh中運行'clean'。我會更新這篇文章,試圖說清楚。 – ABach 2010-04-27 19:18:39

+2

無法在這裏重現。 – wRAR 2010-04-27 19:19:36

回答

4

問題是指定path變量 - 因爲zsh具有保留的變量(除了PATH),所以覆蓋它將消除shell找到任何命令的能力。

正確答案,當然是使用一個變量以外$path

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

接受你的答案。我懷疑你覆蓋了PATH變量。這非常重要。使用不在環境中的另一個。例如,CLEAN_PATH不應該具有這種影響。 – xenoterracide 2010-04-27 22:55:24

+0

哦,我的...這是多麼明顯。謝謝。 :) – ABach 2010-04-27 22:56:23

+0

另外 - 我只能在兩天內接受我自己的答案...... – ABach 2010-04-27 22:57:38

1

我猜它會覆蓋變量path,這是用來查找命令之一。這就是爲什麼它不再查找命令。

0

我挖了幾個小時再找到這個。巖組提供一個很好的特技從PATH型變量,位出主題的刪除重複,但可能是有用的:

typeset -T PYTHONPATH pythonpath 
typeset -U pythonpath 
  1. 第一行綁定PYTHONPATH冒號隔開字符串的zsh陣列
  2. 第二刪除重複項