-e 选项与各种终端模拟器

-e 选项与各种终端模拟器

当我尝试用鼠标滚动 less 的输出时,我不喜欢 xterm 的行为(它滚动命令历史记录而不是滚动 less)。所以我得到了 Sakura,它的行为正如我想要的那样。然而,“-e”选项似乎效果不佳。

当我打字时

xterm -e "ls /usr/bin | less"

我得到一个新的 xterm,其中命令ls /usr/bin | less已被执行。然而,

sakura -e "ls /usr/bin | less"

似乎忽略了我的请求,只是启动了一个新的樱花终端。

事实上,我已经尝试过其他终端模拟器和选项,但没有成功......

sakura -x "ls /usr/bin | less"
xfce4-terminal -e "ls /usr/bin | less"
roxterm -e "ls /usr/bin | less"
lxterminal -e "ls /usr/bin | less"
lilyterm -e "ls /usr/bin | less"

他们中的一些人忽略了我的请求,有时他们声称他们说“无法执行子进程......(没有这样的文件或目录)”

我目前在 Arch 上。我遇到过http://osdir.com/ml/general/2013-07/msg06468.html,这似乎表明 Sakura 在某一时刻的表现正如我所希望的那样(我目前拥有 3.1.0 版本)。

任何帮助让sakura或其他一些“好的”终端模拟器按预期运行将非常感激(也就是说,让命令 $TERM -e "ls /usr/bin | less" 打开一个终端模拟器并执行给定的命令并让 less 的输出可以用鼠标滚轮滚动)。

答案1

sakura似乎被破坏了,但对于其他人来说,有两种主要类型:那些在后面接受一个参数-e并将其视为 shell 命令行的类型,以及那些接受参数列表并且第一个用于派生要执行的命令的类型(不涉及 shell,因此无法使用管道等 shell 功能。

xterm,作为一种特殊情况,如果有多个参数或一个参数解析(通过在 中查找$PATH)为现有可执行文件,则属于第二类,否则属于第二类。

所以:

xterm -e 'ls | less'

/usr/bin/ls | less例如,将运行可执行文件(是的,带有空格和管道字符的文件名) ls | less,如果存在,则使用第一个参数,否则(更有可能)/bin/sh使用,,,,sh否则。-cls | less

在大多数其他终端中(也建议这样xterm做以消除歧义),您需要sh明确调用:

lxterminal -e sh -c 'ls | less'

sakura-e似乎不起作用。这-x在某种程度上是有效的。你可以做:

sakura -x 'sh -c "ls | less"'

它似乎对传递给 的单个参数进行类似 shell 的解析-x,将其拆分为参数列表,然后执行它。

关于滚动进入less.它可以在sakura(和其他基于 VTE 的终端仿真器)中工作,因为在交替时screen(就像在发出 后tput smcup),向下和向上滚动事件发送与按DownUp键时相同的转义序列。

您会注意到它不适用于ls | less -X, wheresmcup未发布。

xterm支持将其作为一个选项,默认情况下不启用。您可以通过将XTerm.VT100.alternateScroll资源设置为 来更改它true,例如添加:

XTerm.VT100.alternateScroll: true

到您的~/.Xdefaults(对于xterm在该机器上启动的 s),或者在加载到您的 X 服务器中的资源文件中(对于xterm在任何地方启动并连接到您的 X 服务器的 s),或者xterm使用以下命令调用:

xterm -xrm 'XTerm.VT100.alternateScroll: true' -e sh -c 'ls | less'

相关内容