问题描述
简而言之,我正在寻找解释说明为什么命令的输出未到达文件。如果我在这里做错了什么,该如何正确处理,以使输出到达文件?
命令:
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