Executar espera dentro de um script bash como outro usuário

1

Estou escrevendo um script para instalar alguns softwares pequenos que estou desenvolvendo. Esse script é executado com sudo (como root), mas alguns dos comandos executados pelo script precisam (ou devem ser) executados com um usuário regular cujo nome eu mantenho na variável $userName . A maioria dos comandos são um forro e su -c "/what/ever/command" $userName funciona bem o suficiente.

No entanto, um desses comandos que eu não quero executar como root vai me perguntar coisas (na verdade, apenas uma coisa, mas muitas vezes: se deve substituir um arquivo existente ou não). Esse comando que eu posso chamar de " baaad_command " não tem nenhuma opção para fornecer uma resposta padrão (não há " --assume-no " ou algo assim).

A única opção vi viável é usar o comando esperar e responder " n\r " todas as vezes as saídas de comando e string começam com " Overwrite ", eu quero que meu script responda não (significando " n\r ") quantas vezes baaad_command perguntar "Overwrite... ? [y/n]"

Eu tentei muitas combinações diferentes de su, spawn, espera ... sem qualquer sorte.

Esta é a minha última tentativa até agora:

#!/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

Não tem nada de extraordinário nas outras 200 tentativas ... só acontece de ser o último.

Qualquer sugestão será muito apreciada. Obrigado antecipadamente.

    
por BorrajaX 22.03.2012 / 20:58

1 resposta

7

Você provavelmente precisará usar su -c 'expect -c "spawn ..."' - observe as aspas extras.

    
por 22.03.2012 / 21:41