エコータイムスタンプを作成する/エコー文字列でパイプを使用できない

スクリプトファイルの出力を記録するためにタイムスタンプを使用したいと思います。

On the console

日付+%Y%m%d_%H%M%S_%N

prints something like "20120206_104531_944652200"

私が見つけたすべてのそれらのナノとmikro秒をカットするために

日付+%Y%m%d_%H%M%S_%N | sed s、 "。\ {6 \} $" ,

which gives me something like "20120206_104531_944"

スクリプトファイルでは多少異なるようです。 タイムスタンプは、ログ出力が完了するたびに評価する必要があります

このスクリプトコードは動作します:

#!/usr/bin/bash
log_prefix1="date +%Y%m%d_%H%M%s_%N"

echo "`${log_prefix1}` blabla"
sleep 3
echo "`${log_prefix1}` blabla"

残念ながら、私はナノ秒の3つの最も重要な桁だけでこれを実行する方法を見つけませんでした。

このスクリプトコードは機能しません:

#!/usr/bin/bash
log_prefix="date +%Y%m%d_%H%M%s_%N | sed s,\".\{6\}$\",,"

echo "`${log_prefix}` blabla"
sleep 3
echo "`${log_prefix}` blabla"

次のエラーメッセージが表示されます。

date: extra operand `|'
Try `date --help' for more information.

パイプが実行時にsedに間違っています。

何か案は?

0

1 答え

あなたはそれのための関数を作成することによってあなたの人生を少しシンプルにすることができます。

何かのようなもの:

log_echo() { 
  echo $(date +%Y%m%d_%H%M%s_%N | sed 's,.\{6\}$,,') "[email protected]";
}

...

log_echo hello there
3
追加された
$ * はDWIMに準拠していません。例えば、複数の連続した空白文字を含む文字列を試してみてください。代わりに "$ @" を使用してください。
追加された 著者 l0b0,
良い点、更新
追加された 著者 Mat,