KornShell - Набор “-x” (отладка) флаг глобально?

Существует ли способ установить режим отладки (установите-x) на KornShell (ksh) сценарий глобально? В настоящее время кажется, что я имею, делают что-то как следующее:

a(){
   set -x
   #commands
}

b(){
   set -x
   #more commands
}

set-x 
a
#commands
b

Я действительно хотел бы только должным быть назвать команду набора-x в одном месте.

Примечание: Это - все в KSH88 на AIX.

Пример:

#!/bin/ksh
set -x

a(){
   echo "This is A!"
}

b(){
   echo "This is B!"
}

a
echo "Outside"
b
dev2:/home/me-> ./testSetX
+ a
This is A!
+ echo Outside
Outside
+ b
This is B!
dev2:/home/me->

8
задан javaPlease42 3 January 2014 в 23:37
поделиться

2 ответа

Это ksh88 на машине HP-UX:

me@host ..dev/
$ cat ./test/verbose
#!/bin/ksh
set -x

hello() {
  print $1
}

hello kapow!
exit

me@host..dev/
$ ./test/verbose    
+ hello kapow!
+ print kapow!
kapow!
+ exit

Конечно, выглядит так, что работает нормально. Я подтвердил, что он также работает с «set -x» где угодно перед первым вызовом функции.

Я перешел на систему AIX и столкнулся с описанной вами проблемой. Когда функции определены как function a { или a () { в AIX ksh88, set -x не переносится в функцию -локальная область видимости. При переключении на ksh93 в том же блоке AIX функции, объявленные с использованием нового синтаксиса function a {, также не переносят внешний набор -x во внутреннюю область видимости. Однако ksh93 ведет себя так же, как POSIX sh (и ksh88 на других платформах), используемый для поведения, передавая set -x через функцию, когда функция определена в старом a () { метод. Вероятно, это связано с обратной совместимостью в ksh93, где он пытается имитировать старое поведение, когда функции определены старым способом.

Таким образом, вы можете временно переключить интерпретатор на ksh93 для целей отладки, а затем снова переключиться на ksh88, если вам не нравятся более длинные массивы, ассоциативные массивы, математика с плавающей запятой, поддержка пространства имен и грубая 10-кратное улучшение скорости выполнения, которое приносит ksh93 ;) Потому что похоже, что с ksh88 в AIX ответ будет «нет, вы не можете этого сделать». : (

8
ответ дан 5 December 2019 в 08:52
поделиться

Добавьте его в строку shebang:

#!/bin/ksh -x

Или установите его в верхней части ваш сценарий:

#!/bin/ksh
set -x

Или запустите свой сценарий из командной строки:

ksh -x script_name
4
ответ дан 5 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: