AIX 上的 ctrl-v 键

AIX 上的 ctrl-v 键

我是 AIX 的新手,我错过了一些在其他 *nix 版本上运行良好的技巧。

我需要CTRL一个 ksh 脚本中的序列,像^[( CTRL-[) 并且为此我习惯使用ctrl-v [,但在这里它不起作用。

目前我不得不使用带有 Putty 的 Windows 机器,所以我甚至无法在我的 Linux 机器上编辑脚本并将脚本传输到 AIX 服务器上。

您知道为什么以及我该如何解决这个问题吗?

继续回答:

@Dennis:

在 Korn shell 脚本中还有其他几种使用转义的方法:

print '\E' escape1='\033'    # contains the literal characters as shown
echo -e "$escape1"  
printf '%b' "$escape1"  
print "$escape1"
escape2=$'\e'     # contains an actual escape  
echo "$escape2"  
printf '%s' "$escape2"  
print "$escape2"  

对于终端颜色

man 5 terminfo

$'' 符号允许 ANSI-C 转义:

green=$'\e[01;32m'

可能是 ksh88 不支持 $''

我使用 ksh88,但我可以切换到 ksh93。

ctrl-v on command line
Version M-11/16/88i 

/usr/dt/bin/dtksh
print ${.sh.version}
Version M-12/28/93d

green=$'\e[01;32m' doesn't give me any error on ksh88,

但它不会扩展转义序列。在 ksh93 上也存在$''同样的问题

green="$'\e[01;32m'"

使用大写E解决了这个问题(奇怪!!!):

print $'\E[01;32m hello'

总结一下:

\E  works
\e  NO
\033    works just with echo
^[     ^v^[ do not work at all

答案1

尝试这个:

stty -a

看看是否lnext^V。如果不是,请尝试:

stty lnext ^V

您将在其中输入“^”(插入符号)和“V”作为单独的字符。现在尝试看看您是否可以使用^V^[^VEsc您的键盘可以使用吗?)输入转义符。

另外,检查你是否处于 emacs 模式

根据您的使用方式,还有其他几种方法可以在 Korn shell 脚本中使用转义:

print '\E'
escape1='\033'    # contains the literal characters as shown
echo -e "$escape1"
printf '%b' "$escape1"
print "$escape1"
escape2=$'\e'     # contains an actual escape
echo "$escape2"
printf '%s' "$escape2"
print "$escape2"

当然,您通常不会单独输出 escape。

答案2

如果我记得 AIX,Ctrl+V转义序列应该可以工作,但我也记得 AIX 中的默认 TERM 并不总是您所期望的。检查您的$TERM变量。如果它很奇怪:

export TERM=xterm  

或者

export TERM=vt100

如果您的$TERM命令错误,那么即使Ctrl+V有效,Ctrl+[也可能不会执行任何操作。这是一个 VT100 序列。

相关内容