Как передать команду с переменными к в?

Так, я делаю сценарий удара, это, как предполагается, принимает времена и расширение от пользователя (через zenity) и планирует вызов с sipcmd в данное время:

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

Так или иначе, когда я выполняю его, я вижу, что задание создается сценарием, но когда время настает, ничего не происходит. Я думаю, что в просто не принимает канал. Какие-либо идеи?

0
задан 19 June 2015 в 10:52

1 ответ

Передача по каналу к at работает просто великолепно. Например, следующее хорошо работает:

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

Однако можно упростить заключение в кавычки, если Вы используете 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

Те кавычки перейдут как есть к команде, поэтому решат, хотите ли Вы на самом деле их.

Наконец, Вы отметили свой вопрос , но Ваш сценарий как показано не имеет хижина . Без него, если Вы не делаете bash my/script, это выполнит использование sh. Всегда определяйте хижину. Добавьте к верхней части сценария как самая первая строка:

#! /bin/bash
0
ответ дан 4 October 2019 в 02:56

Другие вопросы по тегам:

Похожие вопросы: