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つのコマンドが欲しいのですが、誰かが私が何を試せるか知っていますか?
date
はbash
ビルトインではありません。これはシステムユーティリティであり、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"