web-dev-qa-db-ja.com

1日または2日前の日付コマンド。異なるフラグを見る

OSXとUbuntuで実行する必要があるbashスクリプトを書いています。この特定の問題がOSの不一致が原因であるかどうかはわかりません。おそらく両方のbashですが、2つのシェルのdateコマンドの違いでしょうか?どれどれ。

OSXのbashシェルでは、2日前の日付を印刷するために、次のようにします。

date -v-2d +"%Y"."%m"."%d"

それ -vフラグは、Ubuntu bash Shellでは無効です。代わりに、以下を使用しています。

date --date="2 days ago" +"%Y"."%m"."%d"

残念ながら、--dateフラグは、OSX bashシェルでは認識されません。

両方のインスタンスで機能するフラグ付きの1つのコマンドが欲しいのですが、誰かが私が何を試せるか知っていますか?

9
jkj2000

datebashビルトインではありません。これはシステムユーティリティであり、OSXとLinuxで異なるものです。 OSXはBSDツールを使用し、LinuxはGNUツールを使用します。これらは類似していますが、同じではありません。

あなたが見つけたように、 OSX-dフラグをdateに設定すると夏時間を制御しますが、Linuxでは表示時間を設定します。 OSXでは、-vは表示日付を調整しますが、Linuxでは-vフラグは無効なオプションです。

ほとんどの場合、BSDとGNUはPOSIX標準との互換性を目指しています。 POSIX標準のdate をチェックすると、この場合は役に立たないことがわかります。日付を調整するための構文はサポートされていません。

コードを両方のプラットフォームで機能させる場合は、次のことを試してください。

[ "$(uname)" = Linux ] && date --date="2 days ago" +"%Y"."%m"."%d" || date -v-2d +"%Y"."%m"."%d"

または(bashが必要):

[ "$OSTYPE" = linux-gnu ] && date --date="2 days ago" +"%Y"."%m"."%d" || date -v-2d +"%Y"."%m"."%d"
15
John1024