如何将带有变量的命令传递给 at?

如何将带有变量的命令传递给 at?

因此,我正在编写一个 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

相关内容