如何在bash中并行分配环境变量

kag0

我正在尝试使用命令替换的结果设置几个环境变量。我想与&并行运行命令wait我目前所拥有的看起来像

export foo=`somecommand bar` &
export fizz=`somecommand baz` &
export rick=`somecommand morty` &
wait

但是很显然,在使用&变量分配时,它不会粘滞。因此,在之后wait,所有这些变量都未分配。

如何并行分配这些变量?

更新:这是我根据公认的答案最终使用的东西

declare -a data
declare -a output
declare -a processes

var_names=(
    foo
    fizz
    rick
)

for name in "${var_names[@]}"
do
    processes+=("./get_me_a_value_for $name")
done

index=0
for process in "${processes[@]}"; do
    output+=("$(mktemp)")
    ${process} > ${output[$index]} &
    index=$((index+1))
done
wait

index=0
for out in "${output[@]}"; do
    val="$(<"${out}")"
    rm -f "${out}"

    export ${var_names[index]}="$val"

    index=$((index+1))
done

unset data
unset output
unset processes
兴奋剂

经过一番反省后,我想出了一个丑陋的解决方法:

#!/bin/bash
proc1=$(mktemp)
proc2=$(mktemp)
proc3=$(mktemp)

/path/to/longprocess1 > "$proc1" &
pid1=$!
/path/to/longprocess2 > "$proc2" &
pid2=$!
/path/to/longprocess3 > "$proc3" &
pid3=$!

wait "$pid1" "$pid2" "$pid3"
export var1="<("$proc1")"
export var2="<("$proc2")"
export var3="<("$proc3")"
rm -f "$proc1" "$proc2" "$proc3"

根据评论中的要求,以下是如何使此列表可扩展为任意大列表的方法:

#!/bin/bash
declare -a pids
declare -a data
declare -a output
declare -a processes

# Generate the list of processes for demonstrative purposes
processes+=("/path/to/longprocess1")
processes+=("/path/to/longprocess2")
processes+=("/path/to/longprocess3")

index=0
for process in "${processes[@]}"; do
    output+=("$(mktemp")
    $process > ${output[$index]} &
    pids+=("$!")
    index=$((index+1))
done
wait ${pids[@]}
index=0
for process in "${processes[@]}"; do
    data+="$(<"${output[index]}")"
    rm -f "${output[index]}"
    index=$((index+1))
done
export data

结果输出将在data数组中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在bash脚本中访问PHP环境变量?

来自分类Dev

如何在 bash 行 CURL 中包含环境变量?

来自分类Dev

如何在bash中仅打印定义的变量(shell和/或环境变量)

来自分类Dev

如何在bash中仅打印定义的变量(shell和/或环境变量)

来自分类Dev

如何在bash中访问名称中带有空格的环境变量?

来自分类Dev

如何在bash脚本中执行环境变量中的程序

来自分类Dev

如何在IPython中使用bash环境变量?

来自分类Dev

如何在bash环境变量列表中进行迭代?

来自分类Dev

如何在Windows git bash shell中访问此环境变量

来自分类Dev

如何在bash脚本的环境变量中存储grep的--exclude参数

来自分类Dev

如何在Dockerfile中设置.bash_profile环境变量?

来自分类Dev

如何在bash中列出所有非环境变量?

来自分类Dev

如何在bash中列出所有非环境变量?

来自分类Dev

如何在Windows git bash shell中访问此环境变量

来自分类Dev

如何在Windows git bash shell中访问此环境变量

来自分类Dev

如何在Dockerfile中设置.bash_profile环境变量?

来自分类Dev

Bash:如何从脚本中显示环境变量的内容?

来自分类Dev

如何在并行的Bitbucket管道步骤中共享环境变量?

来自分类Dev

如何在GNU Makefile目标中默认环境变量

来自分类Dev

环境变量如何在cloud9中工作

来自分类Dev

PowerShell:如何在Path环境变量中删除路径

来自分类Dev

如何在apache xampp中设置环境变量?

来自分类常见问题

如何在makefile中获取shell环境变量?

来自分类Dev

如何在Shake文件模式中插入环境变量?

来自分类Dev

如何在Python中读取* new * OS环境变量?

来自分类Dev

如何在C#中设置系统环境变量?

来自分类Dev

如何在Python Flask应用中存储环境变量?

来自分类Dev

如何在Python中设置父shell的环境变量?

来自分类Dev

如何在capistrano部署中设置环境变量?

Related 相关文章

  1. 1

    如何在bash脚本中访问PHP环境变量?

  2. 2

    如何在 bash 行 CURL 中包含环境变量?

  3. 3

    如何在bash中仅打印定义的变量(shell和/或环境变量)

  4. 4

    如何在bash中仅打印定义的变量(shell和/或环境变量)

  5. 5

    如何在bash中访问名称中带有空格的环境变量?

  6. 6

    如何在bash脚本中执行环境变量中的程序

  7. 7

    如何在IPython中使用bash环境变量?

  8. 8

    如何在bash环境变量列表中进行迭代?

  9. 9

    如何在Windows git bash shell中访问此环境变量

  10. 10

    如何在bash脚本的环境变量中存储grep的--exclude参数

  11. 11

    如何在Dockerfile中设置.bash_profile环境变量?

  12. 12

    如何在bash中列出所有非环境变量?

  13. 13

    如何在bash中列出所有非环境变量?

  14. 14

    如何在Windows git bash shell中访问此环境变量

  15. 15

    如何在Windows git bash shell中访问此环境变量

  16. 16

    如何在Dockerfile中设置.bash_profile环境变量?

  17. 17

    Bash:如何从脚本中显示环境变量的内容?

  18. 18

    如何在并行的Bitbucket管道步骤中共享环境变量?

  19. 19

    如何在GNU Makefile目标中默认环境变量

  20. 20

    环境变量如何在cloud9中工作

  21. 21

    PowerShell:如何在Path环境变量中删除路径

  22. 22

    如何在apache xampp中设置环境变量?

  23. 23

    如何在makefile中获取shell环境变量?

  24. 24

    如何在Shake文件模式中插入环境变量?

  25. 25

    如何在Python中读取* new * OS环境变量?

  26. 26

    如何在C#中设置系统环境变量?

  27. 27

    如何在Python Flask应用中存储环境变量?

  28. 28

    如何在Python中设置父shell的环境变量?

  29. 29

    如何在capistrano部署中设置环境变量?

热门标签

归档