journalctl --after-cursor 与 shell 脚本无法正常工作

时间:2021-02-19 04:22:52

标签: systemd-journald systemd-journal-remote

我正在尝试使用游标选项在指定时间后从 journalctl 获取日志。 下面是脚本文件中的代码。

value=$( journalctl -n 0 --show-cursor | tail -1 | cut -f2- -d: | sed 's/ /"/;s/$/"/')
echo "$value"
sleep 20
echo "journalctl --after-cursor=$value"
journalctl --after-cursor=$value

这个脚本文件的输出是

"s=3057f92d5b3e4afdb5eb91c22e880074;i=1f646;b=0bc7e6e9f16f4847b2d50e0a0dd31023;m=a10d4c4d1;
t=5bba8ac2477ae;x=1cc1645fed6ffc79"
journalctl --after-cursor="s=3057f92d5b3e4afdb5eb91c22e880074;i=1f646;
b=0bc7e6e9f16f4847b2d50e0a0dd31023;m=a10d4c4d1;t=5bba8ac2477ae;x=1cc1645fed6ffc79"
Failed to seek to cursor: Invalid argument

正如我们在上面看到的那样,journalctl --after-cursor 导致“无法找到游标错误”

但是,如果在命令行终端中执行相同的操作,则 --after-cursor 会给出输出。

在 shell 脚本中使用 post-cursor 选项调用 journalctl 之前需要做些什么吗?

1 个答案:

答案 0 :(得分:0)

Bash 对插值非常挑剔。您需要修剪 $value 周围的双引号,然后再引用它:

value=$( journalctl -n 0 --show-cursor | tail -1 | cut -f2- -d: | sed 's/ /"/;s/$/"/') | tr -d '"')
echo "$value"
sleep 20
echo "journalctl --after-cursor=$value"
journalctl --after-cursor="$value"

我已经通过运行上面的代码确认这是有效的,并且我还在另一个使用游标的脚本上使用了相同的方法。