在命令的每个输出行前加上时间戳
Prepend timestamp to every output line of a command
我有这个脚本应该在命令的每个输出行前加上时间戳:
$command 2>&1 | while IFS= read -r line; do printf '[%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$line"; done
它在大多数情况下工作正常,但我遇到了一个问题。
让我们举个例子:
read -rep "Your age: " age | while IFS= read -r line; do printf '[%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$line"; done
在这种情况下,时间戳不会被添加到前面。
我理解这里的问题是没有到达换行符所以没有打印换行符。我想知道是否可以打印所有收到的字符,然后在我们得到换行符后打印时间戳。
这里的问题是读取命令没有向 stout 写入任何内容,因此 while 循环没有要处理和循环的输出。通过添加年龄的回声,您将获得所需的结果。
read -rep "Your age: " age;
echo $age | while IFS= read -r line;
do
printf '[%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')";
done
我有这个脚本应该在命令的每个输出行前加上时间戳:
$command 2>&1 | while IFS= read -r line; do printf '[%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$line"; done
它在大多数情况下工作正常,但我遇到了一个问题。
让我们举个例子:
read -rep "Your age: " age | while IFS= read -r line; do printf '[%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$line"; done
在这种情况下,时间戳不会被添加到前面。
我理解这里的问题是没有到达换行符所以没有打印换行符。我想知道是否可以打印所有收到的字符,然后在我们得到换行符后打印时间戳。
这里的问题是读取命令没有向 stout 写入任何内容,因此 while 循环没有要处理和循环的输出。通过添加年龄的回声,您将获得所需的结果。
read -rep "Your age: " age;
echo $age | while IFS= read -r line;
do
printf '[%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')";
done