我試圖構建一個快速腳本來查找目錄下的所有git repos,並依次「git pull」每一個。使用xargs將命令傳遞給子shell在別名內不起作用
這是我迄今發現:
find ~/ -name ".git" -type d | sed 's,/*[^/]\+/*$,,' | xargs -L1 bash -c 'cd "$1" && git pull' _
如果粘貼到終端,這將工作完全因爲它的預期。但是,如果我讓這成爲一個別名我.bashrc
文件:
alias gpa="find ~/ -name ".git" -type d | sed 's,/*[^/]\+/*$,,' | xargs -L1 bash -c 'cd "$1" && git pull' _"
的命令不起作用。我修改了它,企圖得到它打印的內容通過xargs的啓動子shell正在接收:
alias printgpa="find ~/ -name ".git" -type d | sed 's,/*[^/]\+/*$,,' | xargs -L1 bash -c 'echo "$1"' _"
運行時,每個子shell打印一個換行符,但沒有別的。
任何人都可以回答爲什麼會發生這種情況嗎?我的直覺告訴我這是別名中的語法問題,但我不知道到底發生了什麼。
'在bash會得到它呼應的命令設置-x'它認爲他們,就在執行它們之前。非常適合整理棘手的報價問題。 – bobbogo 2013-02-21 18:26:31
你可能想使用一個函數而不是別名,這樣你就不用擔心棘手的引用來使它工作。 – chepner 2013-02-21 20:01:14