Если я запускаю скрипт с ./test.sh 100
, я не получаю вывод 100, потому что я использую поток. Что мне нужно сделать, чтобы получить ожидаемый результат? (Я не должен менять test.sh
хотя.)неправильный вывод из-за фоновых процессов
test.sh
#!/bin/bash
FILE="number.txt"
echo "0" > $FILE
for ((x=1; x<=$1; x++)); do
exec "./increment.sh" $FILE &
done
wait
cat $FILE
increment.sh
#!/bin/bash
value=(< "$1")
let value++
echo $value > "$1"
EDIT
Ну я попытался это:
#!/bin/bash
flock $1 --shared 2>/dev/null
value=(< "$1")
let value++
echo $value > "$1"
Теперь я получаю s omething like 98 99 все время, если я использую ./test.sh 100
Я не очень хорошо работаю, и я не знаю, как это исправить.
Возможно, вы путаете темы и процессы. Bash запускает только внешние процессы, а не потоки. Оба они могут использоваться для параллелизма, но с разными последствиями. – zneak
Что вы должны изменить, чтобы обеспечить последовательную работу набора асинхронных потоков? ... Небеса и Земля. – gbtimmon
..start "поиск и устранение неисправностей" с человеком 7 встроенных страниц. ==> exec [-cl] [-a name] [command [arguments]] Если задана команда, она заменяет оболочку. Новый процесс не создается. Аргументами являются аргументы команды. Если задана опция -l, оболочка помещает тире в начале нулевого аргумента, переданного команде. Это то, что делает логин (1). Параметр -c заставляет команду запускаться с пустой средой. [...] <=== –