Ejecute expect dentro de un script bash como otro usuario

Ejecute expect dentro de un script bash como otro usuario

Estoy escribiendo un script bash para instalar un pequeño software que estoy desarrollando. Ese script se ejecuta sudo(como root), pero algunos de los comandos que ejecuta el script deben (o deberían) ejecutarse con un usuario normal cuyo nombre mantengo en la $userNamevariable. La mayoría de los comandos son sencillos y su -c "/what/ever/command" $userNamefuncionan bastante bien.

Sin embargo, uno de esos comandos que no quiero ejecutar rootme va a preguntar cosas (en realidad, solo una cosa, pero muchas veces: si debe sobrescribir un archivo existente o no). Ese comando al que puedo llamar " baaad_command" no tiene ninguna opción para proporcionar una respuesta predeterminada (no hay " --assume-no" ni nada por el estilo).

La única opción que veo factible es utilizar elesperarcomando y responda " n\r" cada vez que el comando genere una cadena que comience con " Overwrite", quiero que mi secuencia de comandos responda no (es decir, " n\r") tantas veces como baaad_command solicite"Overwrite... ? [y/n]"

He probado muchas combinaciones diferentes de su, spawn, expect... sin suerte.

Este es mi último intento hasta ahora:

#!/bin/bash
if [[ -d "$destinationFolder" ]] ; then
    if [[ -n "$userName" ]] ; then
        spawned=$(su -c expect -c "
            spawn baaad_command --user \"foo\" --passwd \"bar\" \"$destinationFolder\"
             expect {
                 Overwrite: { send \"n\r\"; exp_continue }
                 eof { exit }
             }
        " )
    else
        echo "Don't have a non-root username to install baaad_command with. Skipping"
        exit 3
    fi
else
        echo "$destinationFolder directory not found in $(pwd). Can't continue"
        exit 2
fi

No tiene nada destacable respecto a los otros 200 intentos... simplemente resulta que es el último.

Cualquier pista será muy apreciada. Gracias de antemano.

Respuesta1

Probablemente necesites usar su -c 'expect -c "spawn ..."'-- ten en cuenta las comillas adicionales.

información relacionada