36

これを行うために小さなCまたはRubyプログラムを作成できることはわかっていますが、スクリプトの依存関係をできるだけ少なくしたいと思います。

その警告を考えると、OS Xのbashスクリプトで日付計算をどのように行うのでしょうか?誰かが次のことをした投稿を(別のサイトで)見ました:

日付-d「-1日」

しかし、これはOSXでは機能しないようです。

補遺:

Ruby、Python、PerlなどがOS Xに標準装備されているとのコメントや回答が何人かあります。私はこれらの3つの言語すべてに精通しており、自分のやりたいことを実行するスクリプトを簡単に書くことができます。実際のところ、私はすでにRubyで書かれたそのようなスクリプトを持っています。

したがって、おそらく「外部依存」とはどういう意味かを明確にする必要があります。つまり、bashスクリプトが外部の他のスクリプトを呼び出さなくてもよいということです。言い換えれば、私はそれがOS Xのバニラインストールで利用可能で、すでにパス上にあるいくつかのユーティリティを使用することを望んでいます。

ただし、これが可能であるとは思えないので、外部の依存関係であるRubyスクリプトを使用する必要があります。

4

8 に答える 8

49
$ date -v -1d

-d は、サマータイム フラグを設定します。

詳細については、マンデートを試してください。

于 2009-01-31T06:20:03.543 に答える
27

たとえば、次の OS X 日付コマンドは、入力文字列 20160826 (現在の時刻ではありません) に 14 日を追加します。

date -j -f %Y%m%d -v+14d 20160826 +%Y%m%d
于 2015-09-19T15:06:31.540 に答える
20

MacOS は Linux ではなく BSD に基づいているため、実際のコマンドは次のとおりです。

date -v-1d

調整スイッチは の形式を取ります-v[+/-](number)[ymwdHMS]

于 2011-04-08T17:37:28.830 に答える
1

Matthew が言及しているコマンドは、Leopard の /bin/date で機能します。さらに、Schwern が指摘するように、シェル スクリプトが Mac OS X で実行されることが確実な場合は、/usr/bin に標準で組み込まれている Python や Ruby を使用しないでください。これは、特定のシナリオでの移植性にまったく影響しません。

于 2009-01-31T14:05:25.570 に答える
0

これを行うために小さなCまたはRubyプログラムを作成できることはわかっていますが、スクリプトの依存関係をできるだけ少なくしたいと思います。

CまたはRubyスクリプトとして実行すると、依存関係が少なくなり、クロスプラットフォームになります。Bashスクリプトは、他のさまざまなスクリプト/アプリケーション、主にGNUユーティリティを呼び出すだけです。コマンドの多くは使用できないか、異なる引数を取ります。他のプラットフォーム(特にOS XとLinuxの間)。

RubyはデフォルトでOSXLeopard(および10.4、そして私が正しく思い出せば以前のバージョン)に含まれており、Rubyの組み込みの日付ライブラリを使用すれば、どのプラットフォームでも一貫して動作します。

リモートで複雑なことをしようとするときはいつでも、一般的に「適切な」スクリプト言語を使用するのが最善です。

于 2009-01-31T15:02:04.677 に答える
0

これは、Google ドキュメントでジャーナルの日付を印刷するために使用するスクリプトです。

    #!/bin/bash

    # ask user for variable details
    read -p 'Starting date in "mm-dd-yyyy" format: ' DATE

    # adjust the count by editing the "x" number in {0..x}
    # 91 days will give you about 3 months, currently set to 6 for testing
    # %a gives short day of the week, -m -d gives single digit months and days, capital Y gives 4 digit year

    for i in {0..6}
    do
         NEXT_DATE=$(date -j -f %m-%d-%Y -v+"$i"d $DATE +'%a %-m/%-d/%y')
         echo -e "$NEXT_DATE\n\n\n"
    done

出力例を次に示します (各日付の間に 3 つの新しい行を使用しています)。

18/4/1(日)

月 4/2/18

火 4/3/18

18/4/4(水)

18/4/5(木)

2018/4/6(金)

2018/4/7(土)

于 2018-04-03T18:23:21.333 に答える