2012-07-20 70 views
1

我們的代碼檢查節點安裝:ZSH這/那裏別名-p不識別節點

which="type -p" 
if [ $SHELL = "/bin/zsh" ]; then 
    which="whence" 
fi 
# make sure that node exists 
node=`$which node 2>&1` 
ret=$? 
if [ $ret -ne 0 ] || ! [ -x "$node" ]; then 
<"This error code is returned"> 

但是當我運行這個與ZSH(OhMyZsh)它返回一個127(不存在)。評論出which="whence"可以讓它運行良好。

不消除整個別名位有沒有辦法讓ZSH與此一起玩?理想情況下,我想在我的最終做出改變來完成這項工作,而不是完全修改此代碼。

回答

1

你的意思是說,你運行$node,看起來你試圖運行命令,其名稱是node --alias-args,它不存在?

如果這是真的,請將第三行更改爲使用whence -p:它與bash中的type -p具有相同的輸出。如果沒有,請解釋何時返回此代碼。

更新:我不知道是什麼在ohmyzsh做(雖然我不是一個單一的想法如何使沒有找到一個內置),所以只是嘗試重寫代碼以這樣的方式

# At the very top 
if [ -n $ZSH_VERSION ] ; then 
    emulate -L zsh 
endif 
<...> 
which="type -p" 
if [ -n $ZSH_VERSION ] ; then 
    which=(whence -p) # Changes variable type as well 
endif 
node=`$which node 2>&1` 
if ((?)) || ! test -x $node ; then 
<...> 
+0

在下一段代碼中編輯(對不起)。當我運行這個時,-p仍然返回相同的錯誤。 – 2012-07-23 16:54:07

+0

這很奇怪。我會理解'$ which node'在設置爲'type -p'時運行錯誤127:與bash不同,zsh將它視爲一個單詞並且''type -p「'命令不存在(使用'$ = which '要解決或使用由bash支持的數組)(行爲是默認的,有一個選項可以使zsh的行爲像bash一樣)。順便說一句,測試zsh是'!測試-z $ ZSH_VERSION',而不是'$ SHELL'。 – ZyX 2012-07-23 17:10:12