试图解决为什么这不起作用以及我将如何解决它。使用并行的while循环的简单示例。
set -eu
TOKEN='hello'
query() {
while [ -z "$TOKEN" ];
do
echo "This is $1 and this is $2"
done
}
export -f query
parallel query ::: 4 4 4 4 ::: 0 1 2 3
每当我从CLI运行它时,它就会无限期挂起,我在这里缺少什么?
答案 0 :(得分:1)
[ -z "$TOKEN" ]
将永远为真,因为您没有导出变量。因此循环会永远持续下去,导致挂起。
由于parallel
是一个外部命令,因此必须导出您希望它及其子级访问的所有变量。
如果导出它,脚本将成功终止(但显然没有输出,因为永远不会输入while
循环)。
注意:环境变量是每个进程。其他人不会看到一个过程中的更新,因此您不能将它们用作信号量或IPC。如果您正在尝试这样做,那么您将不得不使用其他内容(例如文件或管道)。
答案 1 :(得分:1)
@that other guy's answer is correct, but maybe I can tempt you to try env_parallel
, which automatically exports your environment.
答案 2 :(得分:0)
-z $TOKEN
永远不会成真,因为你已经初始化了它。