您正在寻找env_parallel,它正是这样做的。
把这个放在 $HOME/.bashrc:
. `which env_parallel.bash`
例如通过这样做:
echo '. `which env_parallel.bash`' >> $HOME/.bashrc
别名
alias myecho='echo aliases'
env_parallel myecho ::: work
env_parallel -S server myecho ::: work
env_parallel --env myecho myecho ::: work
env_parallel --env myecho -S server myecho ::: work
功能
myfunc() { echo functions $*; }
env_parallel myfunc ::: work
env_parallel -S server myfunc ::: work
env_parallel --env myfunc myfunc ::: work
env_parallel --env myfunc -S server myfunc ::: work
变量
myvar=variables
env_parallel echo '$myvar' ::: work
env_parallel -S server echo '$myvar' ::: work
env_parallel --env myvar echo '$myvar' ::: work
env_parallel --env myvar -S server echo '$myvar' ::: work
数组
myarray=(arrays work, too)
env_parallel -k echo '${myarray[{}]}' ::: 0 1 2
env_parallel -k -S server echo '${myarray[{}]}' ::: 0 1 2
env_parallel -k --env myarray echo '${myarray[{}]}' ::: 0 1 2
env_parallel -k --env myarray -S server echo '${myarray[{}]}' ::: 0 1 2
env_parallel 是 GNU Parallel 20160722 的一部分。它是 beta 质量,所以如果发现任何错误,请报告。
如果你了解你的 UNIX,你就会知道你不能在从当前 shell 启动的 shell(例如bash -c)中使用别名、非导出函数、非导出变量和非导出数组;特别是如果 shell 是远程的(例如ssh server myalias)。对于env_parallel,这个常识必须修改为:你不能做到不作弊。