Так, я делаю сценарий удара, это, как предполагается, принимает времена и расширение от пользователя (через 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
Так или иначе, когда я выполняю его, я вижу, что задание создается сценарием, но когда время настает, ничего не происходит. Я думаю, что в просто не принимает канал. Какие-либо идеи?
Передача по каналу к 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