
Я новичок в AIX и мне не хватает некоторых приемов, которые хорошо работают в других версиях *nix.
Мне нужна CTRLпоследовательность в скриптах ksh, например ^[
( CTRL-[), и для этого я привык использовать ctrl-v [, но здесь это не работает.
На данный момент я вынужден использовать Windows-компьютер с Putty, поэтому я даже не могу редактировать скрипты на моем Linux-компьютере и переносить скрипты на сервер AIX.
Знаете ли вы, почему и как можно решить эту проблему?
Продолжим ответы:
@Деннис:
Есть еще несколько способов использования escape в скрипте оболочки Korn:
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" как отдельные символы. Теперь попробуйте набрать escape с помощью ^V^[
( ^VEsc
работает ли на вашей клавиатуре?).
Также проверьте, находитесь ли вы в режиме emacs.
В зависимости от того, как вы его используете, есть еще несколько способов использования escape в скрипте оболочки Korn:
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+ Vescape должна работать, однако я также помню, что TERM по умолчанию в AIX не всегда был таким, как вы ожидаете. Проверьте переменную $TERM
. Если она странная:
export TERM=xterm
или
export TERM=vt100
Если вы $TERM
ошибаетесь, то даже если Ctrl+ Vработает, Ctrl+ [может ничего не сделать. Это последовательность VT100.