因此,我正在编写一个 bash 脚本,该脚本应该接受来自用户的时间和分机(通过 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 根本不接受管道。有什么想法吗?
答案1
管道at
工作正常。例如,以下内容工作正常:
echo 'date > /tmp/foo' | at now + 1 minute
但是,你可以使用以下方法来简化引用:异端:
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
。始终指定一个shebang。添加到脚本顶部,作为第一行:
#! /bin/bash