シェルスクリプトで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