Использование переменных 'values' для определения переменных 'names' в KornShell - PullRequest
0 голосов
/ 04 октября 2011

Моя программа включает несколько потоков JAVA, вызывающих файл сценария KornShell (ksh) с различными параметрами.Этот файл сценария, в свою очередь, вызывает некоторые команды SQL, которые возвращают некоторый статус.Я сохраняю это состояние в переменной как часть скрипта, проверяю значение, возвращаемое из SQL, и выполняю соответствующие действия.Проблема заключается в том, что все сценарии выполняются в одном сеансе, и, следовательно, имя переменной становится общим для всех потоков.Поскольку эти потоки работают асинхронно, я хочу, чтобы эта ссылка была разорвана.Самым простым решением, которое я мог придумать, было создание отдельной переменной для каждого потока (используйте некоторый входной параметр для скрипта в качестве идентификатора), но это означало бы, что имя этой переменной должно быть динамическим.То есть я должен иметь возможность использовать значение переменной в имени другой переменной.Это вообще возможно?Если это так, то как мне это сделать?

Java Thread - |Та же сессия |||Java Thread - - |Тот же сценарий |||Java Thread - - - |То же имя вар |||
Java Thread - - |(Это то же самое var | | name может вызвать | Поток Java - | Несоответствия) |

Если нет, то может ли кто-нибудь предложить альтернативный подход?Важным аспектом этого является то, что часть JAVA является серверной программой и будет работать в течение продолжительного времени, поэтому мне нужно будет вручную «сбросить» эти переменные.(Что-то, что я не могу сделать, если я использую массив для хранения всего этого)

1 Ответ

1 голос
/ 04 октября 2011

... Я сохраняю это состояние в переменной как часть скрипта (ksh), проверяю значение, возвращаемое из SQL, и выполняю соответствующие действия. Проблема заключается в том, что все сценарии выполняются в одном сеансе, и, таким образом, имя переменной становится общим для всех потоков.

Итак, подведем итог:

  • каждый поток использует System.exec(...) или эквивалент для запуска ksh сценария

  • сценарий ksh использует переменную для хранения состояния от выполнения запроса SQL.

В этом случае переменная ksh НЕ будет совместно использоваться различными экземплярами выполняемого сценария. Каждый экземпляр ksh имеет свой собственный набор переменных.

Должно быть другое объяснение того, что здесь происходит.


Вы говорите, что if [ $var_$val -eq 0 ]; then ... дает неправильный ответ. Я не удивлен. $var_$val не может расширяться до числа, поэтому проверка на нулевое значение всегда будет неудачной.

...