Существует ли способ установить режим отладки (установите-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->
Это 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 ответ будет «нет, вы не можете этого сделать». : (
Добавьте его в строку shebang:
#!/bin/ksh -x
Или установите его в верхней части ваш сценарий:
#!/bin/ksh
set -x
Или запустите свой сценарий из командной строки:
ksh -x script_name