O problema básico é que stdin (que aurman
está tentando ler) não está vindo do usuário, ele está sendo redirecionado primeiro de $myfile
e depois de um documento aqui contendo os comandos do shell para sudo
para executar. Uma opção é passar esses arquivos por um descritor de arquivo diferente, como # 3 (que normalmente não é usado). Eu acho que você também pode simplificá-lo, eliminando a execução do shell em sudo
- já que você está executando aurman
em primeiro plano, não há necessidade de wait
para isso. não precisa do shell (e, portanto, não precisa do aqui-doc).
while read line <&3; do
if [[ "$line" =~ \$[[:space:]]aurman[[:space:]]-S[[:space:]][[:alnum:]]* ]]
then
aurline=$(echo "$line" | awk '{ $1=""; $2=""; $3=""; print}' | sed 's/^ *//')
for aurpkg in $aurline
do
sudo -u "${my_user}" aurman -S --noconfirm --needed --noedit "$aurpkg"
done
fi
done 3< "$myfile"
Se isso não funcionar e você realmente precisar executar o shell em sudo
, também poderá redirecioná-lo via FD # 3 e ter bash
como script, assim:
sudo -u "${my_user}" bash /dev/fd/3 3<< EOF
aurman -S --noconfirm --needed --noedit "$aurpkg"
wait
EOF