2017-02-09 84 views
0

我試圖創建一個循環遍歷幾個文件夾並運行構建命令的別名,但我不斷得到一個只顯示for >的輸出。如何將一個循環合併到一個bash別名中

這是我在我的.zshrc文件

recurse_build() { 
    for src in `ls`; do 
     cd $src; build; cd .. 
    done 
} 

一個功能,我試圖讓一個別名

alias br='recurse_build' 

但我結束了以下提示

for > 

任何幫助,將不勝感激。

編輯:修正了函數中的語法錯誤。是一種錯誤的情況下鍵入而不是複製粘貼

+0

爲什麼不使用函數而不是別名?順便說一句,你有一個語法錯誤的功能。 – janos

+0

爲什麼要定義一個函數並將其映射到一個別名?直接使用該功能 – Inian

+0

您的功能定義已損壞(按當前張貼的方式);在[shellcheck.net](http://shellcheck.net)進行分析。 – mklement0

回答

3

除了在命令替換時缺少反引號,無論如何這都是迭代文件的錯誤方法。使用glob模式。

recurse_build() { 
    for src in */; do 
     pushd "$src" || continue # Don't do anything if pushd fails 
     build 
     popd 
    done 
} 

使用pushdpopd是不必記住返回到少許清潔劑。

+0

修復了缺少的反引號,並且我不知道這種方式在bash中迭代文件。我只是嘗試你所建議的語法,但我仍然得到'for>'提示符,而不是實際構建它。讓我看看我是否可以調試一下。 編輯:咆哮他直接功能,它似乎工作。它不起作用的別名,但我可以處理只是調用該函數。 – jabbajac

1

可能是右側缺少反襯,但處理輸出 ls通常是一個壞主意。 This works

recurse_build(){ 
    for src in */; do 
     cd "$src" && ./build && cd .. 
    done 
} 

#TEST 
mkdir -p a b c 
echo 'echo $PWD:$0' |tee a/build b/build c/build >/dev/null 
chmod +x a/build b/build c/build 


recurse_build 
相關問題