在下面的 shell 脚本中,我想在后台并行运行 2 个命令以加快进程,等待它们完成并在之后继续运行更多命令。

当我在两个循环中使用相同的变量名 (DATASERVERNAME) 时,这些变量是否会在后台相互干扰?我是否应该在每个循环中使用不同的变量名称,例如 DATASERVERNAME_SYBASE、DATASERVERNAME_ORACLE?

#!/bin/bash
while read DATASERVERNAME
do
  some commands here
done < sybase_data_servers.txt &

while read DATASERVERNAME
do
  some commands here
done < oracle_data_servers.txt &

wait

some more commands here

最佳答案

你的脚本是安全的,你可以通过一个小实验来揭示:

#!/bin/sh -eu
echo A > a
echo B > b

X=0

while read X
do
  echo X=$X
done < a &
wait

echo X=$X

while read X
do
  echo X=$X
done < b &
wait



echo X=$X

脚本输出:
X=A
X=0
X=B
X=0

后台循环在不同的进程中运行( $BASHPID 也应该反射(reflect)这一点)。

关于linux - 我可以在 bash 中为多个并行后台进程使用相同的变量名称吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46720064/

10-14 16:16
查看更多