我想知道如何才能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
其行为与我上面提到的相同)。我还测试了使用Terminator
Ubuntu 的默认终端程序。
是否有任何设置可以覆盖此zsh
行为?
任何帮助都将不胜感激。谢谢!
答案1
zsh
您看到的行为与vs无关bash
。由于 howoh-my-zsh
修改了zsh
shell 环境而发生的行为。在 中~/.oh-my-zsh/lib/misc.zsh
,您将找到以下两行:
env_default 'PAGER' 'less'
env_default 'LESS' '-R'
env_default
仅当环境变量尚未设置时才设置其值,因此顾名思义,它定义变量的默认值。 它还会在设置变量时导出变量。 因此,如果变量PAGER
和LESS
尚未设置为其他任何值,则以下行相当于:
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