2

やあ、やあ、私にはこの奇妙なバグがあり、それを修正する方法がわからないので、助けていただければ幸いです。

#!/bin/tcsh -f
set date = ${1}
set time = ${2}
echo 1
set month = `echo $date | cut -f1 -d"-"`
set day = `echo $date | cut -f2 -d"-"`
set year = `echo $date | cut -f3 -d"-"`
echo $date $month $day $year
echo $date $time
if ($year > 69) then
    @ year = $year + 1900
else
    @ year = $year + 2000
endif   
echo 3
if ($month == "Jan") set month = 01
if ($month == "Feb") set month = 02
if ($month == "Mar") set month = 03
if ($month == "Apr") set month = 04
if ($month == "May") set month = 05
if ($month == "Jun") set month = 06
if ($month == "Jul") set month = 07
if ($month == "Aug") set month = 08
if ($month == "Sep") set month = 09
if ($month == "Oct") set month = 10
if ($month == "Nov") set month = 11
if ($month == "Dec") set month = 12
echo 4
set hour1 = `echo $time | cut -c1`
set hour2 = `echo $time | cut -c2`
set min1 = `echo $time | cut -c4`
set min2 = `echo $time | cut -c5`
set ampm = `echo $time | cut -c6`
echo $hour1 #$hour2 $min1 $min2

if ($ampm =~ [pP]) then
    @ hour1 = $hour1 + 1
    @ hour2 = $hour2 + 2
endif

if ($day < 10) then
    printf "%s%s0%s%s%s%s%s" $year $month $day $hour1 $hour2 $min1 $min2
else
    printf "%s%s%s%s%s%s%s" $year $month $day $hour1 $hour2 $min1 $min2
endif

基本的に、プログラムが行うことは、たとえば2つの引数を受け取り、Sep-22-07 11:45am それをこの形式で返すことですyyyymmddhhmm-200709071145

たとえば、最初に2つのゼロを含む2番目のパラメーターを送信すると、奇妙なことが起こります。たとえば、00:01amのようになります。次に、設定された月、設定された日、設定された年全体が異常になり始め、その出力を返します。

0.000u 0.001s 0:00.00 0.0%      0+0k 0+0io 0pf+0w
0.000u 0.001s 0:00.00 0.0%      0+0k 0+8io 0pf+0w
0.000u 0.001s 0:00.00 0.0%      0+0k 0+0io 0pf+0w

+他の出力。

プログラムには他のエコーがありますが、私はそれらをデバッグに使用しました。

とにかく、よろしくお願いします。私はCShellの初心者なので、簡単なバグの場合は申し訳ありませんが、見つからないようです。

4

2 に答える 2

2

tcshのコマンドset time(引数なし)は、シェルによって実行される各コマンドのタイミングを有効にするために使用されます。それがあなたが見ている余分な出力の源です。どうやら

set time = 00:01am

または同様の効果があります。先頭の「00:」が違いを生む理由はわかりませんが、コマンドラインで簡単に再現できます。

あなたはCシェルの初心者だと言っているので、トム・クリスチャンセンによるこの記事にあなたを導くことをやや強いられていると感じています。

有害と考えられるCshプログラミング

多くのプログラマーは、上記の記事で説明した問題の多くを回避するために、非対話型スクリプトにBourneシェルまたはその派生物の1つ(ksh、bash ...)を使用することを好みます。

于 2010-01-04T06:30:49.820 に答える
0

設定時間=x; ユーザーがコマンドの時間をログに記録するタイミングのしきい値を設定できるようにします。このしきい値を低く設定すると、そのしきい値よりも時間がかかるすべてのコマンドの時間が計測されます。xが比較的高い数値に設定されている場合、そのしきい値を超えるものだけがタイミングを取り、表示されている出力を生成します。したがって、時刻を00:数値に設定している場合にのみ表示されます。ただし、使用している時間形式をどのように処理し、それを秒に変換するかは、私の理解を超えています。

于 2011-03-04T21:49:17.093 に答える