我希望能够包装一个命令,这样如果它的输出不适合终端,它将自动通过寻呼机传送。
现在我正在使用以下 shell 函数(在 zsh 中,在 Arch Linux 下):
export LESS="-R"
RET="$($@)"
RET_LINES="$(echo "${RET}" | wc -l)"
if [[ $RET_LINES -ge $LINES ]]; then
echo "${RET}" | ${PAGER:="less"}
else
echo "${RET}"
fi
Run Code Online (Sandbox Code Playgroud)
但这并不能真正说服我。有没有更好的方法(在健壮性和开销方面)来实现我想要的?我也对 zsh 特定的代码持开放态度,如果它可以很好地完成工作。
更新:自从我问了这个问题后,我找到了一个答案,它提供了一个更好的(如果更复杂)解决方案,它在$LINES将输出输送到less而不是全部缓存之前缓冲大多数行。可悲的是,这也不是很令人满意,因为这两种解决方案都没有考虑过长的包裹线。例如,如果上面的代码存储在一个名为 的函数中pager_wrap,那么
pager_wrap echo {1..10000}
Run Code Online (Sandbox Code Playgroud)
将很长的一行打印到标准输出,而不是通过寻呼机进行管道传输。
我通常对 DPMS 屏幕消隐非常满意,但有一个(相当烦人的情况):当使用游戏手柄通过 Wine 玩游戏时,屏幕会在一段时间后变黑。我猜在这种情况下,Xorg 无法识别按下游戏手柄上的按钮(按预期键盘会阻止 DPMS 激活)。
我知道在这种情况下我可以求助于某种 hack,比如xset在运行 wine 之前禁用 DPMS (并在之后重新启用它)的包装脚本,但我想知道是否有更好的解决方案。
注意:我在 ArchLinux 上运行 XMonad,以防万一。