【问题标题】:Multithread Variable Creation in BASHBASH 中的多线程变量创建
【发布时间】:2012-10-14 00:31:59
【问题描述】:

如何在 BASH 脚本中多线程创建变量?例如,如果一个脚本包含以下两行,那么它们如何同时执行?

 export BOTSUBSTITUTIONS=$(less --buffers=-1 ./conf/substitutions.xml)
 export BOTPROPERTIES=$(less --buffers=-1 ./conf/startup.xml)

下面的这个例子不起作用。

export BOTSUBSTITUTIONS=$(less --buffers=-1 ./conf/substitutions.xml) &
export BOTPROPERTIES=$(less --buffers=-1 ./conf/startup.xml) &
wait

【问题讨论】:

  • 不可能。您可以将& 放在() 中以作为较少任务的背景,但是父脚本不会喜欢那样,只是跳过一些事情,或者仍然等待子进程完成,然后再将控制权返回给脚本并分配返回值。 bash 基本上是单线程的。
  • 谢谢你,@Mark。这是我的想法,但我不想假设。
  • 总有可能使用临时文件。
  • 感谢@RudolfMühlbauer 的建议。

标签: bash multithreading shell unix scripting


【解决方案1】:

将后台进程的输出重定向到单独的文件,等待后台进程完成,然后将结果返回给您的变量。 示例:

less --buffers=-1 ./conf/substitutions.xml >o1& o1=$!
less --buffers=-1 ./conf/startup.xml >o2& o2=$!
wait $o1 $o2
export BOTSUBSTITUTIONS=$(cat o1) ; rm -f o1
export BOTPROPERTIES=$(cat o2); rm -f o2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-17
    • 2021-08-06
    相关资源
    最近更新 更多