我是 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 序列。