【问题标题】:journalctl --after-cursor is not working well with shell scriptjournalctl --after-cursor 不适用于 shell 脚本
【发布时间】:2021-07-21 20:24:54
【问题描述】:

我正在尝试使用 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 脚本中使用光标后选项调用 journalctl 之前需要做些什么吗?

【问题讨论】:

    标签: systemd-journald systemd-journal-remote


    【解决方案1】:

    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"
    

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

    【讨论】:

      猜你喜欢
      • 2013-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-05
      • 2015-11-13
      • 2019-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多