日付: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という名前の2つのファイルにタイムスタンプを設定することを意味しましたが、それ以降、SysV unicesは変換を開始しました(または最初のパラメータで構成されたすべてのエントリ)がタイムスタンプとして解釈されます。1121

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"

おすすめ記事