Não coloque comandos em strings. A maneira de definir comandos compostos é funções.
Em seguida, lembre-se da regra mais importante da programação de shell: sempre coloque aspas duplas em torno das substituições de variáveis, por exemplo, "$foo"
.
Você tem o seguinte código (confiando nas variáveis cmds
, log
, tron
, userconfigdir
, userdatadir
e var
):
run () {
tail -n0 -f -s 0.01 "$cmds" |
while true; do
"$tron" --userconfigdir "$userconfigdir" --userdatadir "$userdatadir" --vardir "$var"
done |
tee -a "$log" |
grep '^[1]' > "${var}logs/chatlogs.log"
}
Agora que o código está em um formato legível, você pode ver que $tron
está sendo executado em um loop infinito. Eu não sei o que você realmente quer fazer, mas você precisa colocar uma condição de finalização nesse loop.