我是AIX的新手,我怀念一些在其他* nix风格上运行良好的技巧。
我需要一个在ksh脚本中的CTRL序列,像^[
( CTRL- [ ),并且我习惯使用ctrl-v [ ,但是在这里不起作用。
目前,我有义务使用带有putty的windows box,所以我甚至不能编辑我的Linux机器上的脚本,并在AIX服务器上传输脚本。
你知道为什么以及如何解决这个问题吗?
恢复答案:
@Dennis:
有一些其他的方法可以在Korn shell脚本中使用escape:
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"
对于terminal的颜色
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
尝试这个:
stty -a
看看下一个是否是^V
如果不是,请尝试:
stty lnext ^V
您将在哪里input“^”(插入符号)和“V”作为单独的字符。 现在尝试看看你是否可以使用^V^[
(在你的键盘上工作^VEsc
?)键入一个转义^VEsc
。
另外,请检查您是否处于emacs模式
根据你使用它的方式,在Korn shell脚本中有一些使用escape的方法:
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"
当然,你通常不会输出所有的自身。
如果我回想起AIX, Ctrl + V转义序列应该可以工作,但是我也记得AIX中的默认TERM并不总是您期望的。 检查你的$TERM
variables。 如果它很奇怪:
export TERM=xterm
要么
export TERM=vt100
如果你的$TERM
是错误的,那么即使Ctrl + V有效, Ctrl + [也许什么也不做。 这是一个VT100序列。