에코 전 타임스탬프

에코 전 타임스탬프

타임스탬프를 앞에 생성하는 더 좋은 방법이 있습니까 echo?

현재 나는 이렇게 합니다:

#!/bin/sh

if mount | grep -q /mnt/usb; then
        echo `date +%R\ ` "usb device already mounted"
else
        echo `date +%R\ ` "mounting usb device..."
        mount -t msdosfs /dev/da0s1 /mnt/usb

        if mount | grep -q /mnt/usb; then
                echo `date +%R\ ` "usb device successfully mounted"
        fi
fi

출력은 다음과 같아야 합니다.

10:36 usb device already mounted

답변1

이를 건너뛰고 명령에 echo메시지를 넣으면 됩니다 . 형식 문자열( 예제에서는)에 텍스트를 삽입할 수 있습니다. 예를 들어:datedate+%R

date +"%R usb device already mounted"

편의상 이를 쉘 함수에 넣을 수도 있습니다. 예를 들어:

echo_time() {
    date +"%R $*"
}

echo_time "usb device already mounted"

여러 번 재사용하려는 경우 클렌저입니다.

답변2

이는 보다 강력하고 이식 가능한(POSIX) 접근 방식으로, 특히 %매개변수를 처리되지 않은 상태로 유지할 수 있는 접근 방식입니다.

echo_time() {
    date +"%H:%M $(printf "%s " "$@" | sed 's/%/%%/g')"
}

답변3

다음에 대한 변수를 생성할 수 있습니다 date +%R.

#!/bin/sh

T=$(date +%R)

if mount | grep -q /mnt/usb; then
        echo "$T usb device already mounted"
else
        echo "$T mounting usb device..."
        mount -t msdosfs /dev/da0s1 /mnt/usb

        if mount | grep -q /mnt/usb; then
                echo "$T usb device successfully mounted"
        fi
fi

답변4

이와 같은 작업을 수행할 때 일반적으로 모든 행(프로그램 출력 포함)에 타임스탬프가 표시되기를 원합니다. 그래서 나는 다음과 같은 것을 사용할 것입니다 :

#!/bin/sh

(
    if mount | grep -q /mnt/usb; then
        echo "usb device already mounted"
    else
        echo "mounting usb device..."
        mount -t msdosfs /dev/da0s1 /mnt/usb

        if mount | grep -q /mnt/usb; then
            echo "usb device successfully mounted"
        fi
    fi
) 2>&1 | perl -ne 'print "[".localtime()."] $_"'

Stephane이 아래에서 지적한 것처럼 개별 프로그램은 파이프로 전송될 때 출력을 버퍼링할 수 있습니다. 물론 이러한 버퍼는 프로그램이 종료될 때 플러시되므로 최악의 경우 프로그램이 종료될 때 타임스탬프가 표시됩니다(출력을 버퍼링했지만 버퍼를 채울 만큼 충분히 인쇄하지 않은 경우). 그러나 echo타임스탬프는 모두 정확합니다.

테스트를 위한 실행 가능한 예:

#!/bin/sh

(
    echo "Doing something"
    sleep 5
    echo "Doing something else..."
    ls /some/file
    sleep 8
    echo "Done."
) 2>&1 | perl -ne 'print "[".localtime()."] $_"'

산출:

[Thu Aug 29 07:32:37 2013] Doing something
[Thu Aug 29 07:32:42 2013] Doing something else...
[Thu Aug 29 07:32:42 2013] ls: cannot access /some/file: No such file or directory
[Thu Aug 29 07:32:50 2013] Done.

관련 정보