2016-05-09 6 views
0

私のコードに問題があります。それはエラーを出力しません、それは動作しますが、私は実際にそれを行う必要はありません。私はコードが必要ではないので、すべてのコードを投稿するつもりはありません、私は必要な行を投稿します。関数で実行されているtimeコマンドが機能しないようにしてください

だから私はこのコード行を持っている:

TIME1=$({ time awkfun ; } 2>&1 >/dev/null); 

awkfunは500個の整数を印刷する必要があります関数であり、TIME1は、機能を実行して印刷する必要があります時間を格納する変数であるところ。問題は通常、私はこの関数を使用しているにもかかわらず、この関数では約500個の整数を出力すると言っていたので、計算を実行しますが印刷はしません。だから実際にはawkfun関数を実行しますが、それを印刷させません。この関数の出力では、すべてを印刷する必要がある時間も必要です。

どうすればよいですか?

私は可能な限り良いと思っていますが、もし何か疑問が生じたら、お気軽にコメントしてください!オラクルのSolarisでのkshでの実行

P.S

+0

なぜすべてを/ dev/null( '2>&1/dev/null')にリダイレクトしますか? – GMichael

+0

@マイケルもし私がそれをやらなければ、TIME1変数に入るのはawkfun関数の出力で、TIME1変数に設定する必要があるのはtimeコマンドの出力です。今はTIME1変数でこのようになっていますが、awkfunがどのような関数を出力するのかは端末上に表示されません。 – hedgehog

+0

出力を実際のファイルにリダイレクトして、探しているものが含まれているかどうかを確認してください – GMichael

答えて

1

ここに正しい順序があります。必要に応じて調整してください:

TIME1=`time (awkfun > /dev/tty) 2>&1` 
+0

OPが実際に 'ksh'を使用している場合、より良い' $() 'を保持するのではなく、従来のバッククォートの構文に戻す必要はありません。 – jlliagre

+0

@jlliagre主なポイントは、迂回路を正しくすることでした。私は 'ksh'(またはsolaris)を持っていなかったので、より普遍的な構文でテストしました。これはもともと、 "_ like something" _というフレーズでトップのコメントで行われました。そして、OPは、アップアップされる答えを投稿するよう提案しました。 'ksh'構文に関しては、_"必要に応じて調整する "_がそれをカバーしていたはずです。 –

+0

問題ありません。明確にするために、あなたの返信が間違っていると書いていませんでした。反対に、それはOPへの実用的な解決策を提供し、実際の問題に対処する。私のほんのわずかな点は、新しい '$(...)'構文が約30年前に 'ksh 'によって正確に導入され、その後POSIXによって標準化され、すべてのBourneスタイルのシェルで採用されました。現在のSolarisリリース(11)の '/ bin/sh 'ではなくなりました。 OPがすでにその構文を使用しており、エラーメッセージをトリガしないという事実は、古い構文に戻す理由がないことを意味する。 – jlliagre

関連する問題