Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I'm new to AIX and I miss some tricks that work well on other *nix flavors.

I need a CTRL sequence in a ksh scripts, like ^[ (CTRL-[) and to do that I'm habit to use the ctrl-v[ , but here it doesn't work.

At the moment I'm obliged to use a windows box with putty so I cannot even edit the scripts on my Linux box and transfer the scripts on the AIX server.

Do you know why and how I can fix the issue?

To resume the answers:

@Dennis:

there are a few other ways to use escape in a Korn shell script:

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"  

For the terminal colors

man 5 terminfo

$'' notation allow ANSI-C escaping:

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

It may be that ksh88 don't support $''

I use a ksh88, but I can switch to 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,

but it doesn't expand the escape sequence. On ksh93 $'' the same issue

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

Using uppercase E solve the issue (weird!!!):

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

To summarize:

\E  works
\e  NO
\033    works just with echo
^[     ^v^[ do not work at all
share|improve this question
    
As the comments below are hidden by default, I found out that it works with: print $'\E[01;32m hello' ((( Not with \e ))) –  tmow Dec 29 '10 at 10:16

2 Answers 2

up vote 3 down vote accepted

Try this:

stty -a

and see if lnext is ^V. If not, try:

stty lnext ^V

where you will type "^" (caret) and "V" as separate characters. Now try to see if you can type an escape using ^V^[ (does ^VEsc work on your keyboard?).

Also, check to see if you're in emacs mode

Depending on how you're using it, there are a few other ways to use escape in a Korn shell script:

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"

Of course, you wouldn't normally output escape all by itself.

share|improve this answer
    
Good point Dennis, lnext was set correctly but I was in emacs mode. So I solved the issue as you advised as follow: blue="\\033[01;32m" green="\\033[01;34m" cyan="\\033[01;36m" white="\\033[0m" export PS1="$(echo ${blue})${USER}@$(echo ${green})${HOST%%.*} $(echo ${cyan})${PWD##*/} $(echo ${white}) " THANKS A LOT! –  tmow Dec 27 '10 at 16:22
    
@antenore: If you use the $'' form, you won't have to use all those echo commands: blue=$'\e[01;32m', etc., and PS1="$blue$USER@ ... (except that on my system 32 gives me green and 34 gives me blue). Ctrl-V should work in emacs mode, btw, but it's better to use a representative form of control characters instead of a literal form. Another way to set up your colors: blue=$(tput setaf 4) (see man 5 terminfo for a list of color numbers). –  Dennis Williamson Dec 27 '10 at 19:26
    
@Dennis tnx, I've tried it but it doesn't work and I cannot find out why. The only way to use escape sequences inside a VAR is to use the echo... That's really weird. Well my problem is solved, but not my need to know. –  tmow Dec 28 '10 at 10:18
    
Does blue=$'\e[01;32m' give you an error message? It may be that you're running ksh88 and it may not support $''. Or is something else happening? –  Dennis Williamson Dec 28 '10 at 14:58
    
So, blue is green, sorry for the mistake. I'm doing all the test on a Solaris host at the moment, anyway I've the same issues. I use a ksh88, but I can switch to ksh93. Version M-11/16/88i (ctrl-v on command line). /usr/dt/bin/dtksh print ${.sh.version} Version M-12/28/93d green=$'\e[01;32m' doesn't give me any error on ksh88, but it doesn't expand the escape sequence. On ksh93 $'' the same green="$'\e[01;32m'" –  tmow Dec 29 '10 at 8:00

If I recall with AIX, the ctrl-v escape sequence should work, however I remember too that the default TERM in AIX wasn't always what you would expect. Check your $TERM variable. If it's weird:

export TERM=xterm

or

export TERM=vt100

If your $TERM is wrong, then even if ctrl-v works, ctrl-[ might not do anything. It's a VT100 sequence.

share|improve this answer
    
I thought was that as well, but no luck. I found that to do the ^V I must hold the ctrl also while I'm pressing the V, for the [ it still doesn't work. I have a Swiss keyboard so to digit the [ I need to hold the alt-gr key –  tmow Dec 27 '10 at 12:18
    
the keystroke should be ctrl-v ctrl-[, I just tried it with the german keyboard layout and it doesn't work for me either(!). Switching back to the EN(US) layout, I can type the combination okay. (the German combination for ctrl-[ being ctrl-altgr-8 ) –  mgjk Dec 27 '10 at 14:53
    
In the swiss qwertz keyboard the [ is on the left of the p (with è and ü holding the alt-gr), still the same issue... I think I'll add a second keyboard with a US layout... much better to work on *nix environments. –  tmow Dec 28 '10 at 13:23

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.