Su código tiene dos errores :El operador !=
necesita espacios a su alrededor, y el &&
debe estar entre pruebas individuales [... ]
.
En lugar de usar muchas pruebas individuales:
for (( x = 7; x <= 65; x += 2 )); do
case $x in
29|53|57|59) ;;
*)
cp -f ~aman/user_ana_normal_mode/Testforaman/user_ana.so "charged_$x"
esac
done
También he quitado la mitad inútil cd
.
tee
внутри подстановки процесса не завершится, пока он не получит eof на свой стандартный ввод или не произойдет какая-либо ошибка.
И, поскольку его стандартный ввод является каналом, он получит EOF
на своем стандартном вводе только тогда, когда все дескрипторы его конца записи будут закрыты.
Итак, вам придется сохранить исходные stdout и stderr, а затем перед wait
перенаправить их на исходники; Дублирование fd через new>&old
приводит к закрытию old
fd.
exec {out}>&1 {err}>&2
exec > >(tee -a output) 2>&1
...
exec >&$out 2>&$err
wait $(pgrep -P "$$")
Кроме того, только в более новых версиях bash wait
также ожидает процессов, запущенных в > >(...)
подстановке процессов; поэтому я использовал wait $(pgrep -P "$$")
вместо простогоwait
(pgrep -P
поиска процессов по их родителю ). Также см. здесь для этой и других ловушек, связанных с > >(...)
.