Terminal-Emulator

-e 各種終端仿真器的選項

  • October 23, 2013

當我嘗試用滑鼠滾動 less 的輸出時,我不喜歡 xterm 的行為(它滾動命令歷史記錄而不是滾動 less)。所以我得到了 Sakura,它按照我想要的方式執行。但是,“-e”選項似乎效果不佳。

當我輸入

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

我得到了一個新的 xterm,該命令ls /usr/bin | less已在其中執行。然而,

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

似乎忽略了我的請求,只是啟動了一個新的 Sakura 終端。

事實上,我已經嘗試過其他終端仿真器和選項,但沒有成功……

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 可以用滑鼠滾輪滾動)。

sakura似乎被破壞了,但對其他人來說,主要有兩種類型:一種是在後面接受一個參數-e並將其視為 shell 命令行,另一種是採用參數列表,第一個用於派生要執行的命令(不涉及外殼,因此無法使用管道等外殼功能。

xterm, 作為一種特殊情況,如果有多個參數或一個參數解析(通過在 中查找$PATH)到現有的執行檔,則屬於第二類,否則屬於第二類。

所以:

xterm -e 'ls | less'

例如,將執行/usr/bin/ls | less執行檔(是帶有空格和管道字元的文件名),ls | less如果它存在,則作為第一個參數,否則(更有可能),使用/bin/sh,,,,sh否則。-c``ls | 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(對於xterms 在該機器上啟動),或在載入到您的 X 伺服器的資源文件中(對於xterms 在任何地方啟動並連接到您的 X 伺服器),或呼叫xterm

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

引用自:https://unix.stackexchange.com/questions/97219