シェルスクリプトでBSDバージョンとGNUバージョンの日付を検出するにはどうすればよいですか?
How Can I Detect Bsd Vs
解決:
どのバージョンのを検出したい使用しているdateコマンド。必ずしもOSのバージョンである必要はありません。
GNU Coreutilsdateコマンドは
-バージョンオプション;他のバージョンはしません:
if date --version> / dev / null 2>&1;次にechoGNU日付を使用しますelseechoGNU日付を使用しませんfiしかし、William Pursellが示唆しているように、可能であれば、両方に共通の機能を使用する必要があります。
(私 考える GNU日付で利用可能なオプションは、BSDバージョンで利用可能なオプションのほとんどのスーパーセットです。その場合、BSDバージョンがGNUバージョンで動作することを前提とするコード。)
ポータブルフラグを使用します。標準はここから入手できます
相対的な日付を印刷するという特定の問題については、おそらく日付よりもperlを使用する方が簡単です。
perl -E'sayscalar localtime(time-86400) '(このソリューションは23時間または25時間で完全に失敗しますが、その問題に対処するために多くのperlソリューションが利用可能であることに注意してください。perlに関するFAQを参照してください。)
しかし、あなたは確かにキースのアイデアのバリエーションを使用して、次のことを行うことができます。
if date -v -1d> / dev / null 2>&1; then DATE = 'date -v 1d' else DATE = 'date --date =' 1日前 '' fi eval $ DATEあるいは単に
DATE = $(date -v -1d 2> / dev / null)|| DATE = $(date --date = '1日前')もう1つのアイデアは、使用する関数を定義することです。
if date -v -1d> / dev / null 2>&1;次にdate1d(){date -v -1d; } else date1d(){date --date = '1日前'; } fi