xt
是自定义的 csh/tcsh 别名,用于打开具有特定窗口颜色的 shell。它发出以下命令:
xterm -geometry 105x25 -font 8x13 -bc -bg #333 -fg #999 \!* &
如何编写一个命令来打开一个新 shell,并且根据 shell 在堆栈中的级别来确定其颜色。
例子:
- %> xt
打开外壳 A (白色 bg/黑色 fg) - 新外壳 - %> xt
打开外壳 Aa (黑色 bg/灰色 fg) - 子外壳 - %> xt
打开壳 Aaa (绿色 bg/黄色 fg) - 孙壳
虽然这是针对 csh/tcsh 的,但如果 bash 更简单/更方便,那么它也是可以接受的。如上所述,我希望一个命令/别名可以打开父级和子级 shell 并决定使用什么颜色。
答案1
大多数 shell(tcsh、bash、zsh,但不包括 csh)SHLVL
在启动时都会增加环境变量,因此这$SHLVL
表示当前 shell 的嵌套级别。因此,请执行以下操作(对于 tcsh)
set xt_bg_colors=(white white black green)
set xt_fg_colors=(black black gray yellow)
alias xt "xterm -geometry 105x25 -font 8x13 -bc -bg $xt_bg_colors[$SHLVL] -fg $xt_fg_colors[$SHLVL] \!* &"
答案2
我将创建一个包含颜色规范列表的数组变量(或两个数组 - 一个用于 fg,一个用于 bg)。然后,在您的别名中使用索引变量从该数组中进行选择,然后增加它。
演示:
> set array=(apple banana cherry)
> @ index = 1
> @ index = ( ( $index ) % ${#array} + 1 ) ; echo $array[$index]
每次执行最后一行(代表您的别名)时,都会回显数组中的当前项,索引会增加,然后如果索引超出数组的长度,则会回绕。
您可能需要使用文件来跟踪索引而不是内存变量。