如何将 zsh 的 zargs 与命令列表一起使用?
How can I use zsh's zargs with list of commands?
如何使用 zsh 的 zargs
命令列表?我知道使用 sh -c
之类的东西,但似乎 zsh
可以做一些更有效率的事情。
我想也许是一个匿名函数,例如:
zargs -I arg -- **/*.git -- function { cd /.. ; git log -1 --format=%cd } arg
但我明白了
zsh: parse error near `}'
注意:我也知道我可以用
解决这个例子
zargs -I arg -- **/.git -- git -C arg/.. log -1 --format=%cd
但我正在寻找更通用的解决方案。
zargs
只是一个 shell 函数,它只能接受参数,它不是 shell 语法中的关键字,如 for
/while
...
这里,你不妨使用一个循环:
for dir (**/.git(N/)) (cd -- $dir:h && git log -1 --format=%cd)
对于 zargs
,您可以使用您预先定义的函数:
log() (
cd -- :h && git log -1 --format=%cd
)
zargs -I arg -- **/.git(/) -- log arg
如果您想以通用方式内联代码,您可以定义一个助手,例如:
run() eval "shift; "
zargs -I arg -- **/.git(/) -- run '(cd -- :h && git log -1 --format=%cd)' arg
zargs
对于分解长参数列表以避免 execve()
的“arg 列表太长”限制很有用,但是对于像 -I arg
这样的用法,我发现它与 for
循环相比没有什么优势。
如何使用 zsh 的 zargs
命令列表?我知道使用 sh -c
之类的东西,但似乎 zsh
可以做一些更有效率的事情。
我想也许是一个匿名函数,例如:
zargs -I arg -- **/*.git -- function { cd /.. ; git log -1 --format=%cd } arg
但我明白了
zsh: parse error near `}'
注意:我也知道我可以用
解决这个例子zargs -I arg -- **/.git -- git -C arg/.. log -1 --format=%cd
但我正在寻找更通用的解决方案。
zargs
只是一个 shell 函数,它只能接受参数,它不是 shell 语法中的关键字,如 for
/while
...
这里,你不妨使用一个循环:
for dir (**/.git(N/)) (cd -- $dir:h && git log -1 --format=%cd)
对于 zargs
,您可以使用您预先定义的函数:
log() (
cd -- :h && git log -1 --format=%cd
)
zargs -I arg -- **/.git(/) -- log arg
如果您想以通用方式内联代码,您可以定义一个助手,例如:
run() eval "shift; "
zargs -I arg -- **/.git(/) -- run '(cd -- :h && git log -1 --format=%cd)' arg
zargs
对于分解长参数列表以避免 execve()
的“arg 列表太长”限制很有用,但是对于像 -I arg
这样的用法,我发现它与 for
循环相比没有什么优势。