Некоторые вещи, которые вам не хватает:
appendnum $no &
, функция appendnum
не может изменять переменную x
в основном процессе оболочки. Вы можете получить что-то похожее на поведение, которое вы пытаетесь получить с помощью этого:
x=TR007.out
> "$x"
appendnum() {
echo "$1" >> "$x"
}
for no in {0..10}
do
appendnum $no &
done
wait
Вы получите числа от 0 до 10, записанные в файл TR007.out
.
wait
сам по себе (без аргументов )будет ждать всех дочерних процессов. appendnum() { echo "$1"a >> "$x" echo "$1"b >> "$x" } for no in {1..3} do appendnum $no & done, вы можете получить
1a
/ 1b
/ 2a
/ 2b
/ 3a
/ 3b
в файле — или вы можете получить 2a
/ 2b
/ 1a
/ 1b
/ 3a
/ 3b
, или вы можете получить 2a
/ 1a
/ 2b
/ 3a
/ 3b
/ 1b
или хуже. Запись асинхронных процессов в один и тот же файл — плохая идея. Вероятно, вам следует сделать что-то вроде
for no in {1..3} do task"$no" > file"$no" & done wait cat file1 file2 file3 > combined_resultДругие примечания :
$(command)
делает то же самое как `command`
. Вам следует придерживаться формы $(command)
. x=`echo $x$num`
или x=$(echo $x$num)
. Просто скажите x="$x$num"
. appendnum $no
; делать appendnum "$no"
и т. д. Вы бы использовали {{hostvars['inventory_hostname']['...']}}
. Но если вы не хотите получать доступ к информации с других хостов, вы можете изменить свой шаблон (stats.j2 )на
Arch: {{ansible_architecture}}