9

多くのechoステートメントを含むシェルスクリプトがあります。出力の各行の前に時刻/日付を付けたい。

だから、私はすべてを交換しました

echo "Some text1"
echo "Some text2"

echo "`date +%y/%m/%d_%H:%M:%S`:: some text1"
echo "`date +%y/%m/%d_%H:%M:%S`:: some text2"

これはかなり醜いです。とにかく、エイリアス(またはCの#defineのアナログ)を作成して、よりクリーンにする方法はありますか?

明らかに、次のようなことをします。

DATE=`date +%y/%m/%d_%H:%M:%S`
echo "$DATE:: some text1"
echo "$DATE:: some text2"

...は機能しません。その場合、DATEは1回だけ計算され、各エコーの日付は同じになるためです。

私は、すべてのエコーを、プレフィックスを付けるprint関数呼び出しに置き換えることを考えています。誰か他の/より良いアイデアがあるかどうか知りたいです。

4

6 に答える 6

16
echodate()
{
    echo `date +%y/%m/%d_%H:%M:%S`:: $*
}

echodate Some text 1
echodate Some text 2
于 2009-11-10T05:13:37.527 に答える
4

bashを使用している場合...:

#!/bin/bash

function myecho() {
        echo "`date +%y/%m/%d_%H:%M:%S`:: $@"
}

myecho "hola"
于 2009-11-10T05:19:32.783 に答える
3

はい、シェル関数または逆にエイリアスを使用します。

alias now="date +%s" # or your specific date format
echo "`now` some text"
于 2009-11-10T05:20:35.963 に答える
3
#!/bin/bash
echo() {
    printf "`date`: $1\n"
}

echo "test"

-

結果は次のようになります。

abi @ cefix:〜$ sh test.sh

Fr18.Mär13:33:35 CET 2011:テスト

したがって、すべてのエコーステートメントを変更する必要はありません。

于 2011-03-18T12:31:08.210 に答える
1

または、フォーマットを保存するだけです。

format="+%y/%m/%d_%H:%M:%S::"
echo $(date $format) some text

ところで、それほど多くの引用は必要ありません。

于 2011-04-14T02:44:58.100 に答える
-1

KornShell(ksh)を使用している場合、ここに関数があります。

#** Description: Logs stringToLog to scriptLog using a standard date format.
#** Parameters:  ${1} stringToLog (Required)
#**              ${2} scriptLog (Required)
log() {
        echo "[`date +'%Y/%m/%d %H:%M:%S%s'`]: ${1}"  >> "${2}"
}

上記の関数の呼び出し例:

log "Starting foo script." "${PWD}/logs/foo.log"
于 2014-02-18T15:57:08.010 に答える