Como passar um comando com variáveis para at?

0

Então, estou fazendo um script bash que deve aceitar tempos e uma extensão do usuário (através do zenity) e agendar uma chamada com o sipcmd no momento:

extension=$(zenity --entry --title="New wake-up call" --text="Enter the extension number:" --entry-text "") #get the extension number
hour=$(zenity --scale --title="New wake-up call" --text="Select the hour:" --min-value=00 --max-value=23 --value=8) #get the hour of call
minute=$(zenity --scale --title="New wake-up call" --text="Select the minute:" --min-value=00 --max-value=59 --value=30) #get the minute

case "$minute" in #need to convert single-digit minutes to double digits because at is whiny
0) minute=00;;
1) minute=01;; # all the way to 9
esac

echo "./sipcmd -P sip -u 10shi -c swordfish -w 127.0.0.1 -f \"msyb.wav\" -x \"c$extension;vmsyb.wav;ws1;" | at -m $hour:$minute #pass the command to at

De qualquer forma, quando eu executo, vejo que um trabalho é criado pelo script, mas quando chega a hora, nada acontece. Eu acho que simplesmente não aceita o pipe. Alguma idéia?

    
por 6675636b6d65696e746865617373 19.06.2015 / 09:52

1 resposta

0

A tubulação para at funciona bem. Por exemplo, o seguinte funciona bem:

echo 'date > /tmp/foo' | at now + 1 minute

No entanto, você pode simplificar a citação se usar heredocs :

at -m $hour:$minute <<EOF
/home/user/sipcmd -P sip -u 10shi -c swordfish -w 127.0.0.1 -f "msyb.wav" -x "c$extension;vmsyb.wav;ws1;
EOF

Essas citações vão como estão para o comando, então decida se você realmente quer elas.

Por fim, você marcou sua pergunta bash , mas seu script como mostrado não tem um . Sem isso, a menos que você use bash my/script , ele será executado usando sh . Sempre especifique um shebang. Adicione ao topo do script, como a primeira linha:

#! /bin/bash
    
por muru 19.06.2015 / 10:31