日付計算系の質問はたくさんありましたがこのタイプが
無かったんで質問させていただきます。

やりたいことは題名そのまんまなんですが、具体的に言う
と、UNIX(今使ってるのがHP-UX11.0)上のバッチシェル
で、前日の日付を取得したいのです。できれば中間ファ
イル(一時ファイル)などを生成せずにシェル内で計算を
済ませたいのですが、何か方法はないのでしょうか。

(Ex.)
現在の日付   2002年1月1日
取得したい日付 2001年12月31日

具体的な方法とか書いてあるとさらにうれしいのですが・・・

それではよろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

環境変数 TZ をいじることで実現できるはずです。



お使いの環境は日本標準時(TZ が JST-9)だと想定して話をします。

環境変数 TZ の -9 は、グリニッジ標準時との ずれ を表しているわけですが、
これを一日前にずらしてしまいます。

具体的には、こんな感じ。

% env TZ=JST+15 date


GNU のコマンドが席巻するまでは、割と有名だったやり方です。
もうひとつのやり方として、GNU の date をインストールして No.1 の回答の
ようにする、という手もありますね。
    • good
    • 0
この回答へのお礼

上記のコマンドを実行したらきっちり前日の日付が出てきました。どうやら、条件を満たすのはこれが一番みたいですね。
情報提供ありがとうございました。

お礼日時:2001/12/13 17:50

他の方がおっしゃるとおり、 GNU の date をインストールしてよい環境であれば、それを使うのが一番楽だと思います。


ただ、HP-UX のデフォルトのdate だと、現在日付しか扱えないんですよね。

ニュースグループの fj.unix.shells で、1999年の7月頃この話題が出ていたようです。

下のサイトの[保存された記事を読む]でグループ名にfj.unix.shells 、期間に199907 を指定して見てみてください。

参考URL:http://queen.heart.ne.jp/cgi-bin/queen4
    • good
    • 0
この回答へのお礼

情報提供ありがとうございます。
参照先の情報はほぼGNU版dateとTZを使ったやり方しか載っていませんでした。
それではかなり参考になりました。

お礼日時:2001/12/13 17:48

HP-UXは使用していないので判りませんが、Linux上では



date --date '1 days ago'

とやると昨日の日付が取得出来ます。
オプション等が異なるかもしれませんが、dateコマンドのmanを引くと同様のオプションがあるかもしれませんのでご覧下さい。
後は出力形式のオプションを付加すればお望みの形で出力出来ると思うのですが…。

この回答への補足

回答ありがとうございます。
HP-UX上では残念ながら上記の書式はサポート
されていませんでした。
(dateはあくまで現在の日付の表示、又は日付設定)
なので引き続きアドバイスか何か遭ったらよろしくお願いします。

補足日時:2001/12/13 11:44
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QHP-UX11.0 プロセスのメモリ使用量のしらべかた

MPI処理するプログラムのプロセス毎のメモリ使用量を調査したいのですが、以下の調査方法ではログがうまくのこりません。
以下の手順でSolaris8はうまくできます。
<手順>
% script > log
% top -s 1 を実行。
ほかの端末エミュレータでプログラムを実行。
プログラム終了後topを実行している端末エミュレータで、Ctrl+dでscriptの終了。ログの確認を

% more log
でプロセス毎のメモリ使用量を調べる。

以上なのですが、more でみると文字化けしてしまいます。
ほかにプロセス毎のメモリを調べる方法をご存知でしたら教えていただきたいと思います。宜しくお願い致します。

Aベストアンサー

% top -s 1 -f log
% more log
ではいかがでしょうか?
あと可能性として(?)、予め以下が必要だったりとか?
% export LANG=C

QUNIX:シェルをshからkshへ替えられない

下記の方法で、shからkshへ切り替えるという設問ですが、shのままkshになりません。

1)echoコマンドで、export ENV=$HOME/Env/ksh_envを.profileへ追加
2)Envディレクトリ作成後、ksh_envへ下記を追加
  Set –o noclobber, set-o ignoreeof, set –o vi
3) chmodコマンドで、ksh_envを777変更
4)echoコマンドで、$SHELL=/bin/ksh
5) echoコマンドで、$SHELLを呼ぶと、kshになっている。

何を間違えているか教えて頂けますか?
宜しくお願いします。

Aベストアンサー

ログインシェルを変えたい、という話なら「 man chsh 」
単にkshを実行したいだけなら、通常通り kshを実行。

どちらにしても、環境変数SHELLはシェルを実行したときに自動で設定されるものです。
変更しても無意味です。
4)は不要です。

QUNIX(Bシェル)のプロンプトについて

Bシェルのプロンプトの設定は環境変数PS1に変えたい文字列を入れればOKですが、現在自分のいるディレクトリ名を表示させたい場合はどのようにしたらいいでしょうか。
PS1="["`pwd`"]" などと設定してもディレクトリが変わったらその設定したときのディレクトリ名のままです。
 また、ユーザ名も表示したいのですがsuコマンドでユーザ名を切り替えた場合プロンプトに表示させたユーザ名も変更させることはできるのでしょうか?

Aベストアンサー

純粋な sh でそれをやれとは酷な要求ですねぇ。

まず、su に関しては、最悪でも /usr/bin (unix によっては /bin ?)
より前のパスに、su っていう名前のシェルスクリプトを置いて、
適当にいじればいいかと思います。こっちは不可能ではない。

でも、cd は sh の仕様によっては無理かもしれません。シェルス
クリプトでは、親のディレクトリを変更できません。alias 機能が
あって、cd を上書きできたとして、本来の cd を実行できる機能
がないと、やはりつまづきます。最近の sh なら、alias に似た
function 機能がありますが、例えば SunOS の sh だと、cd コマ
ンドの上書きはできないようです。FreeBSD の sh と、Laser5
linux の bsh なら、次のようにできると思います。
cd () { command cd $1; PS1="`pwd` "; }

QUNIXシェル内での日付計算

UNIX(今使ってるのがHP-UX11i)上のバッチシェルで、
指定した日数分の前の日付を取得したいのですが、
何か方法はないでしょうか。


(例)
現在の日付: 20060511
指定した日数: 10(MAX値は100程度)

取得する日:20060501

Aベストアンサー

hpの技術情報によると、HP-UXなら参考URLの方法が使えるみたいです。

参考URL:http://www.unixguide.net/hp/faq/5.13.2.shtml

Qシェルの中から他のシェルを呼び出す

例えば、ひとつのシェルファイル( aaa.sh )の中に、
-------------------------
#!/usr/bin/csh
set HOME=/home/test/tmp
bbb.sh
-------------------------
と記述した場合、bbb.shで変数$HOMEを使いたいと思いましたが、
使えないようです。(HOME: 未定義の変数と表示されます)
どなたか、これ以外の方法で、このように
シェルからほかのシェルを呼び出して、変数も引き継がれるような方法ご存知ないでしょうか?
多分こーやれば、こうなるかも!みたいなご回答でも結構ですので情報提供をお願いします。

どうぞ宜しくお願い致します。

Aベストアンサー

たぶん環境変数は引き継がれます。
setenvを使えばいいように思います?


このカテゴリの人気Q&Aランキング

おすすめ情報