マシンA(Oracle Linux Serverバージョン6.4を実行)では、次のコマンドを使用して1ヶ月前の日付をインテリジェントにインポートできます。
$(date -d"1 month ago" '+%Y0%m')
ただし、マシンB(AIX)では機能しません。これを達成する他の方法はありますか?.sh
ファイルで次を実行します。
sh Test.sh
エラーはコンピュータBに表示されます。
date: illegal option -- d
Usage: date [-u] [+Field Descriptors]
答え1
シェルに関するものではなく、date
コマンドに関するものです。このオプションは、このコマンドのGNU実装-d
にのみ適用されます。 GNU以外のシステムでは、GNUバージョンを別のパッケージ(おそらく...のように)としてdate
インストールしないと機能しません。date
gdate
/opt/gnu/bin/date
ksh93の最新バージョンには、同様の機能を持つ組み込みコマンドがありますprintf
。
printf '%(%Y%m)T\n' '1 month ago'
(zsh
日付操作サポートが組み込まれている他のシェルも参照してください(strftime
組み込みモジュールzsh/datetime
))。
他のdate
実装には日付調整機能もあります。たとえば、BSDを使用すると、date
次のことができます。
date -v -1m +%Y%m
AIXには日付計算を実行するためのコマンドが含まれており、POSIXツールボックスにはコマンドがないため、標準/移植可能なコマンドがないことはわかりません。手動で復元perl
または計算できます。
eval "$(date +'y=%Y m=%m')"
m=$((${m#0} - 1))
[ "$m" -gt 0 ] || m=12 y=$((y - 1)) # January case
printf '%d%02d\n' "$y" "$m"
答え2
date -d...
AIX / kshでは機能しないため、AIXで完全に機能する以下を使用してください。
TZ=aaa$(expr $(expr `TZ=aaa24 date +%d` + 1) \* 24) date +%m