回声前的时间戳

TaX*_*XoR 12 shell echo timestamps

存在一种在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
Run Code Online (Sandbox Code Playgroud)

输出应该是这样的:

10:36 usb device already mounted
Run Code Online (Sandbox Code Playgroud)

Dav*_*man 22

您可以跳过echo, 并将消息放入date命令中。date允许您将文本插入格式字符串(+%R在您的示例中)。例如:

date +"%R usb device already mounted"
Run Code Online (Sandbox Code Playgroud)

为方便起见,您也可以将其放入 shell 函数中。例如:

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

echo_time "usb device already mounted"
Run Code Online (Sandbox Code Playgroud)

如果您要多次重复使用,这是一种清洁剂。

  • `echo_time` 会按照你的预期执行,直到你的消息中有一个 `%` 符号。不是一个非常强大的解决方案。 (6认同)

jll*_*gre 6

这是一种更健壮和可移植 (POSIX) 的方法来做到这一点,特别是一种允许%保持未处理状态作为参数的方法:

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


Rad*_*anu 5

您可以创建一个变量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
Run Code Online (Sandbox Code Playgroud)

  • 这很好,因为它只调用 date 一次,而不是三次。 (3认同)
  • 当脚本持续时间不长时这很好,但是当它更长时它会有错误的日期。 (2认同)