UNIXに古くから存在するコマンドであるatを初めて使ってみました。
#【失敗1】
cat << + | at "2017-8-27 10:00"
SUB="出力したい文字"
echo ${SUB}
+
syntax error. Last token seen: 10:00
Garbled time
10時になったら標準出力に「出力したい文字」と表示されるつもりでしたが、予想外のエラーメッセージです。調べてみたら日付はMMDDYY(月日年)形式で指定するとのことでした。
#【失敗2】
cat << + | at "10:01 082717"
SUB="出力したい文字"
echo ${SUB}
+
warning: commands will be executed using /bin/sh
job 8 at Sun Aug 27 10:01:00 2017
待ち行列には登録されたみたいなので、なんか期待できそうです。
ところが10時01分になってもウンともスンともでした。標準出力には出してくれないのかな?
#【失敗3】
cat << + | at "10:02 082717"
SUB="出力したい文字"
echo ${SUB} > ./new.txt
+
ならばとリダイレクションで外部ファイルに出力することにしました。10時02分になるとnew.txtというファイルは作成されましたが、中身は改行記号が1つ入っただけの空のファイルでした。このあたりからパニックになってます。
ようやく原因を突き止めることができたのは、下記のコマンドを打ち込んだ後でした。
#【鍵】
$ at -c 10
-cオプションは、既に投入した10番ジョブの詳細を表示してくれる コマンドだそうです。その結果、
#!/bin/sh
# atrun uid=xxxx gid=xxxx
# mail user x
umask 2
(中略)
XAUTHORITY=/home/user/.Xauthority; export XAUTHORITY
cd /home/user/\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\�\� || {
echo 'Execution directory inaccessible' >&2
exit 1
}
SUB="出力したい文字"
echo "" > ./new.txt
うん? echo "" > ./new.txt そりゃあ駄目でしょう。
#【成功】
cat << + | at "11:00 082717"
SUB="出力したい文字"
echo \${SUB} > ./new.txt
+
これでやっと11時00分に「出力したい文字」が書き込まれたnew.txtが、作成されることになりました。
crontabコマンドもそうでしたが、atコマンドも良く知られていて、とても重宝する割には意外と使い方が難しいです。