1

我正在尝试使用 cursor 选项在指定时间后从 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 导致 "Failed to seek cursor error"

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

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

4

1 回答 1

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"

我已经通过运行上面的代码确认了它的工作原理,并且我还在另一个使用游标的脚本上使用了相同的方法。

于 2021-07-21T12:24:54.387 回答