追伸
原因判明
あらすじ
日付をフォーマット指定して扱いたいんだけどうなくいかない...
% date +%Y-%m-%d invalid directive
help が無いみたいだけどとりあえず usage は以下の通り
% date --help option -- - usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
man date する
% man date DATE(1) BSD General Commands Manual DATE(1) NAME date -- display or set date and time SYNOPSIS date [-ju] [-r seconds] [-v [+|-]val[ymwdHMS]] ... [+output_fmt] date [-jnu] [[[mm]dd]HH]MM[[cc]yy][.ss] date [-jnu] -f input_fmt new_date [+output_fmt] date [-d dst] [-t minutes_west] ...
で以下の記述を発見
EXAMPLES The command: date "+DATE: %Y-%m-%d%nTIME: %H:%M:%S" will display: DATE: 1987-11-21 TIME: 13:36:16
やってみる
% date "+DATE: %Y-%m-%d%nTIME: %H:%M:%S" preexec:printf:4: %Y: invalid directive
なんだろう...
bash にしたら動く
私は zsh 使うのですが一度 bash にしてから実行すれば動く
% bash $ bash -c 'date +"%Y%m%d%H%M"' 201601301556
bash で実行したら上手くいきそうでいかない...
$ exit % bash -c 'date +"%Y%m%d%H%M"' preexec:printf:4: %Y: invalid directive
うーん。zsh の preexec が何かやってるっぽい。
% echo "%Y%m%d%H%M" preexec:printf:4: %Y: invalid directive
date 関係無いなあ。
解決(?)
とりあえずファイルに保存したらちゃんと動くのでまあいいや。
% cat test.sh date +"%Y%m%d%H%M" % sh test.sh 201601301614
解決
カスタマイズしていた zshenv が原因でした。 私は作業している窓をわかりやすくする為にタイトルをつける以下のような処理を記述していました。
#for screen hard status case "${TERM}" in kterm*|xterm*) precmd() { printf "\e]0;${USER}@${HOST%%.*}:${PWD}\a" } ;; screen*|ansi*) preexec() { local -a cmd; cmd=(${(z)2}) if test $cmd[2]; then printf "\ek!$1\e\\" fi } precmd() { printf "\ek$(basename $(pwd))\e\\" } ;; esac
たぶんこれはどこからかコピペしたんだと思いますが(覚えていない)、preexec() で printf が実行される段階で % が含まれているとそのようなフォーマートは知らないと怒られていました。
なのでこうしました。
s/printf/print -Pn/