日期:在 HP-UX 上发生错误转换错误,但在 Linux 上则不然

日期:在 HP-UX 上发生错误转换错误,但在 Linux 上则不然

在 Linux 上:

$ touch 1 12

没问题,创建112

在 SysV 或 HP-UX 11.31 上:

$ touch 1 12
date: bad conversion

我尝试过LANG=C,同样的错误。为什么?

答案1

原始touch命令仅支持将文件的修改时间设置为当前时间。

[YY]MMDDhhmm历史上的 System V 系统引入了使用语法(可选的年、月、日、小时、分钟)指定时间作为第一个参数的功能。当时,使用破折号和字母后跟可选参数值(如-t …)的约定尚未完全建立。这造成了与早期版本的不兼容性,使用像您这样的命令 -最初意味着在两个名为和 的touch 1 12文件上设置时间戳,但从那时起,SysV unices 开始将(或任何完全由数字组成的第一个参数) 解释为时间戳。1121

一些现代 unice,包括 HP-UX,已选择保持与这些 SysV 版本的兼容性。其他版本,包括 *BSD 和最近的 GNU 版本,从未或已经放弃对此语法的支持。

POSIX 的早期版本指定了和,但因为touch TIME FILEtouch [-t TIME] FILEPOSIX-2001-t,仅支持带有该选项的语法。

为了使你的脚本可移植,如果 的第一个参数可以touch是一个名称完全由数字或数字和点组成的文件,则可以放在--文件之前(这是 POSIX 推荐的,所以希望它在任何地方都适用)或放在./文件名的开头:

touch -- 1 12

或者

case "$file" in
  /*) :;;
  *) file="./$file";;
esac
touch "$file"

答案2

根据此 HP 触摸手册页:http://h20565.www2.hp.com/hpsc/doc/public/display?docId=emr_na-c02273390

...该命令需要以下形式的触摸: touch time_str file_name

该表格被识别when neither the -r option, the -t option, nor the -- option delimiter is specified, and the first operand consists of all decimal digits.

相关内容