O comando original touch
só suportava a configuração da hora de modificação do arquivo para a hora atual.
Os sistemas do Historical System V introduziram a capacidade de especificar uma hora como o primeiro argumento, com a sintaxe [YY]MMDDhhmm
(ano, mês, dia, horas, minutos). Naquela época, a convenção para usar um traço e uma letra seguidos de um valor para argumentos opcionais (como -t …
) não estava totalmente estabelecida. Isso criou uma incompatibilidade com versões anteriores, com comandos como o seu - touch 1 12
originalmente significava definir o registro de data e hora em dois arquivos chamados 1
e 12
, mas a partir desse ponto os SysV unices começaram a interpretar 1
(ou qualquer primeiro argumento consistindo inteiramente de dígitos) como timestamp.
Alguns unices modernos, incluindo o HP-UX, optaram por manter a compatibilidade com essas versões do SysV. Outros, incluindo * BSD e versões recentes do GNU, nunca tiveram ou deixaram de oferecer suporte a esta sintaxe.
Versões anteriores do POSIX especificaram touch TIME FILE…
e touch [-t TIME] FILE…
, mas como < um POSIX-2001 , somente a sintaxe com a opção -t
é suportada.
Para tornar seu script portátil, se for possível que o primeiro argumento de touch
seja um arquivo cujo nome consiste inteiramente de dígitos, ou de dígitos e um ponto, coloque --
antes do arquivo (é isso que POSIX recomenda, por isso esperamos que funcione em todos os lugares) ou coloque ./
no início do nome do arquivo:
touch -- 1 12
ou
case "$file" in
/*) :;;
*) file="./$file";;
esac
touch "$file"