在子shell中设置变量
set variable in subshell
我有一个这样的脚本运行良好:
#!/bin/bash
INBOUND=$(echo '5')
OUTBOUND=$(echo '10')
TOTAL=$(($INBOUND+$OUTBOUND))
echo "IN:$INBOUND OUT:$OUTBOUND T:$TOTAL"
输出:IN:5 OUT:10 T:15
现在假设我有两个命令,而不是 echo 5
和 echo 10
,每个命令需要 10 秒到 运行。
我不希望我的脚本需要 10+10 秒才能完成 运行,因此我尝试为每个变量使用两个子流程。
我认为 whis 会起作用:
#!/bin/bash
INBOUND=$(echo '5') &
OUTBOUND=$(echo '10')
wait
TOTAL=$(($INBOUND+$OUTBOUND))
echo "IN:$INBOUND OUT:$OUTBOUND T:$TOTAL"
但是第一个变量没有得到值,输出是:IN: OUT:10 T:10
如何在单独的进程中设置每个变量,以便脚本 运行s 在 10 秒而不是 10+10 秒内完成?
您需要使用(临时)文件。
inbound_result=$(mktemp)
outbound_result=$(mktemp)
echo '5' > "$inbound_result" &
echo '10' > "$outbound_result" &
wait
read inbound < "$inbound_result"
read outbound < "$outbound_result"
total=$((inbound + outbound))
echo "IN: $inbound OUT:$outbound T:$total"
我有一个这样的脚本运行良好:
#!/bin/bash
INBOUND=$(echo '5')
OUTBOUND=$(echo '10')
TOTAL=$(($INBOUND+$OUTBOUND))
echo "IN:$INBOUND OUT:$OUTBOUND T:$TOTAL"
输出:IN:5 OUT:10 T:15
现在假设我有两个命令,而不是 echo 5
和 echo 10
,每个命令需要 10 秒到 运行。
我不希望我的脚本需要 10+10 秒才能完成 运行,因此我尝试为每个变量使用两个子流程。
我认为 whis 会起作用:
#!/bin/bash
INBOUND=$(echo '5') &
OUTBOUND=$(echo '10')
wait
TOTAL=$(($INBOUND+$OUTBOUND))
echo "IN:$INBOUND OUT:$OUTBOUND T:$TOTAL"
但是第一个变量没有得到值,输出是:IN: OUT:10 T:10
如何在单独的进程中设置每个变量,以便脚本 运行s 在 10 秒而不是 10+10 秒内完成?
您需要使用(临时)文件。
inbound_result=$(mktemp)
outbound_result=$(mktemp)
echo '5' > "$inbound_result" &
echo '10' > "$outbound_result" &
wait
read inbound < "$inbound_result"
read outbound < "$outbound_result"
total=$((inbound + outbound))
echo "IN: $inbound OUT:$outbound T:$total"