타임스탬프를 앞에 생성하는 더 좋은 방법이 있습니까 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
메시지를 넣으면 됩니다 . 형식 문자열( 예제에서는)에 텍스트를 삽입할 수 있습니다. 예를 들어:date
date
+%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.