为什么“ gnome-screensaver-command -q> test.txt”不输出到文件?

问题描述

简而言之,我正在寻找解释说明为什么命令的输出未到达文件。如果我在这里做错了什么,该如何正确处理,以使输出到达文件

命令:

gnome-screensaver-command -q > test.txt

TL; TR

首先,简而言之,我的目的是为bash脚本找到一种方法,以判断有人在计算机上工作(屏幕已解锁)还是不工作(屏幕已锁定)。似乎我已经找到了用于此的命令(gnome-screensaver-command -q),也许还不确定,因为我无法真正使用脚本检查锁定/解锁的阶段。

如果我在终端屏幕本身中运行命令gnome-screensaver-command -q,则会按预期返回输出输出表明我使用以下命令是正确的路径:

** Message: 00:06:00.049: Screensaver is not running!

如果我在脚本中运行相同的代码并将结果输出到变量IS_SCREEN_LOCKED=$(gnome-screensaver-command -q),那么我什么也没回来。.我的意思是,$IS_SCREEN_LOCKED变量的值为空。

如果我在终端中运行gnome-screensaver-command -q > test.txt,那么** Message: 00:06:00.049: Screensaver is not running!会到达屏幕,而文件不会到达任何内容...这告诉我重定向本身可以正常工作(因为已创建文件),只是命令有所不同...有人可以在这里解释输出的窍门吗?

我怀疑它是某种“不同类型的流”。是否有一个流,不确定这是否是一个好词,因为man指出{{1} }?...不确定将输出定向到此处文件的命令有什么问题。

系统详细信息:

  • Ubuntu 20.04.1 LTS(Focal Fossa)
  • GNU bash,版本5.0.17(1)-发行版(x86_64-pc-linux-gnu)
  • gnome-screensaver-command 3.6.1

解决方法

它可能正在写入stderr而不是stdout。因此,重定向fd 2而不是fd 1。

gnome-screensaver-command -q 2> test.txt