GNU Parallel和Bash功能:如何从手册中运行简单的例子
伙计们,
我正在尝试学习GNU Parallel,因为我有一种情况,我认为我可以轻松地并行化一个bash功能.所以在试图学习的时候,我去了GNU Parallel manual那里有an example …但我甚至不能让它工作!以机智: (232) $bash --version GNU bash,version 4.1.2(1)-release (x86_64-redhat-linux-gnu) Copyright (C) 2009 Free Software Foundation,Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software; you are free to change and redistribute it. There is NO WARRANTY,to the extent permitted by law. (233) $cat tpar.bash #!/bin/bash echo `which parallel` doit() { echo Doing it for $1 sleep 2 echo Done with $1 } export -f doit parallel doit ::: 1 2 3 doubleit() { echo Doing it for $1 $2 sleep 2 echo Done with $1 $2 } export -f doubleit parallel doubleit ::: 1 2 3 ::: a b (234) $bash tpar.bash /home/mathomp4/bin/parallel doit: Command not found. doit: Command not found. doit: Command not found. doubleit: Command not found. doubleit: Command not found. doubleit: Command not found. doubleit: Command not found. doubleit: Command not found. doubleit: Command not found. 你可以看到,我甚至不能得到一个简单的例子来运行.因此,我可能正在做一些令人惊讶的愚蠢和基本的事情,但我感到失落. ETA:由评论者(chmod x,set -vx)建议的: (27) $./tpar.bash echo `which parallel` which parallel ++ which parallel + echo /home/mathomp4/bin/parallel /home/mathomp4/bin/parallel doit() { echo Doing it for $1 sleep 2 echo Done with $1 } export -f doit + export -f doit parallel doit ::: 1 2 3 + parallel doit ::: 1 2 3 doit: Command not found. doit: Command not found. doit: Command not found. doubleit() { echo Doing it for $1 $2 sleep 2 echo Done with $1 $2 } export -f doubleit + export -f doubleit parallel doubleit ::: 1 2 3 ::: a b + parallel doubleit ::: 1 2 3 ::: a b doubleit: Command not found. doubleit: Command not found. doubleit: Command not found. doubleit: Command not found. doubleit: Command not found. doubleit: Command not found. ETA2:注意,我可以在脚本中调用“doit 1”,并且这样做.所以功能是有效的,它只是不…导出?
您不能从定义它的shell外部调用shell函数. shell函数是shell内的一个概念.并行命令本身无法访问它.
在bash中调用export -f doit可以通过环境导出函数,以便它被子进程所接受.但只有bash了解bash功能.一个(大)*小孩bash进程可以调用它,但不能调用其他程序,例如不是其他shell. 通过消息“命令未找到”,您的首选shell似乎是(t)csh.你需要告诉parallel来调用bash.并行调用由SHELL环境变量1表示的shell,因此将其设置为指向bash. export SHELL=$(type -p bash) doit () { … } export -f doit parallel doit ::: 1 2 3 如果您只想为执行并行命令设置SHELL,而不是为脚本的其余部分设置SHELL: doit () { … } export -f doit SHELL=$(type -p bash) parallel doit ::: 1 2 3 我不知道如何处理远程作业,您可能需要传递 是的,这个奇怪性应该在手册中更突出.在 1这是坏的设计,因为SHELL应该指示交互式命令行shell的用户界面偏好,而不是改变程序的行为. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |