zsh:将所有命令输出保留在终端屏幕上

zsh:将所有命令输出保留在终端屏幕上

我想知道如何才能zsh实现bash这样的行为:我希望命令输出始终显示在终端中这些命令的正下方。

例如,当我运行以下命令时,其结果显示如下bash

john-doe@machine:~$ aws sts get-caller-identity
{
    "UserId": "USERID",
    "Account": "123456789",
    "Arn": "arn:aws:iam::123456789:user/jonh-doe"
}

而在 中执行时zsh,结果会显示在单独的“编辑器”中,我可以在看到这些结果后退出,但一旦退出,我也将无法访问命令的输出。下面是屏幕截图:

一旦退出“编辑器”,命令输出就会丢失(命令执行成功)

我不想总是将输出传输到文件。

我正在运行 Ubuntu 20.04 并oh-my-zsh带有主题powerlevel10k(我也测试了其他主题,zsh其行为与我上面提到的相同)。我还测试了使用TerminatorUbuntu 的默认终端程序。

是否有任何设置可以覆盖此zsh行为?

任何帮助都将不胜感激。谢谢!

答案1

zsh您看到的行为与vs无关bash。由于 howoh-my-zsh修改了zshshell 环境而发生的行为。在 中~/.oh-my-zsh/lib/misc.zsh,您将找到以下两行:

env_default 'PAGER' 'less'
env_default 'LESS' '-R'

env_default仅当环境变量尚未设置时才设置其值,因此顾名思义,它定义变量的默认值。 它还会在设置变量时导出变量。 因此,如果变量PAGERLESS尚未设置为其他任何值,则以下行相当于:

export PAGER='less'
export LESS='-R'

这几行代码的作用是将默认的 Linux 分页器设置为less。这会导致您看到的令人讨厌的行为。如果您在 shell 中运行这两行代码bash,它将开始以同样的方式运行。

有多种方法可以禁用此行为,方法是在代码运行这两行代码之前明确设置这两个变量之一的值。 一个好地方是~/.oh-my-zsh/custom/config.zsh。 一种方法是将环境变量设置PAGER为空字符串,如下所示:

export PAGER=""

您还可以做的另一件事是将less工具配置为不显示此特定行为,除非相关输出至少是完整控制台窗口的输出。这将阻止您示例中的行为。您可以使用以下行来实现此目的:

export LESS="-F -X -R"

这个-F选项是用来做什么的。我也不知道为什么-X需要这个选项,但看起来是这样的。

最后,我要指出的是,每个特定的 Linux 工具都会决定是否应该使用分页器。如果使用,它通常会PAGER在这样做时遵守变量。ls例如,该命令根本不使用分页器。无论它向控制台打印多少输出,它都不会表现出分页行为。如果命令使用分页器,您通常可以使用特定于工具的命令仅为该工具禁用此行为。例如,要仅为 禁用分页器git,您可以执行以下操作:

 export GIT_PAGER=""

您还可以针对单个git命令禁用分页器。例如:

git --no-pager branch

将运行git branch而不通过当前分页器运行输出。

我不知道是否有任何方法可以配置该aws命令是否/如何使用分页器。另一个答案提供了一些关于如何关闭单个任意命令的分页的选项。这是另一种方法,它根据上面给出的信息禁用分页器:

PAGER="" aws sts get-caller-identity

答案2

快速解决方法是使用 bash 运行它。

bash -c "aws sts get-caller-identity"

或者正如所说,你应该检查你的配置文件或使用这个命令之一

aws sts get-caller-identity | cat
aws sts get-caller-identity | less

相关内容