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)
如果您要多次重复使用,这是一种清洁剂。
这是一种更健壮和可移植 (POSIX) 的方法来做到这一点,特别是一种允许%保持未处理状态作为参数的方法:
echo_time() {
date +"%H:%M $(printf "%s " "$@" | sed 's/%/%%/g')"
}
Run Code Online (Sandbox Code Playgroud)
您可以创建一个变量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)