使用变量'values'在KornShell中定义变量'names'

时间:2011-10-04 08:57:17

标签: java multithreading shell scripting ksh

我的程序涉及许多JAVA线程调用具有不同参数的KornShell(ksh)脚本文件。该脚本文件又调用一些SQL命令 返回一些状态。我将此状态存储在变量中作为脚本的一部分,并检查从SQL返回的值并采取适当的操作。 问题是所有脚本都在同一个会话中执行,因此变量名称在所有线程中共享。由于这些线程异步工作,我希望此链接被破坏。我能想到的最简单的解决方案是为每个线程设置一个不同的变量(使用脚本的一些输入参数作为标识符),但这意味着该变量的名称必须是动态的。也就是说,我应该能够在另一个变量的名称中使用变量的值。 这甚至可能吗?如果是的话我该怎么办?

Java线程 - |同一会话|             | | Java线程 - - |相同的脚本|             | | Java线程 - - - |相同的var名称|             | |
Java线程 - - | (同样的var |             |名称可能导致| Java线程 - |不一致)|

如果没有,那么有人可以提出另一种方法吗?这方面的一个重要方面是JAVA部分是一个服务器程序,并且将运行更长的持续时间,因此我需要手动“取消设置”这些变量。 (如果我使用数组存储所有这些,我不能做的事情)

1 个答案:

答案 0 :(得分:1)

  

...我将此状态存储在变量中作为(ksh)脚本的一部分,并检查从SQL返回的值并采取适当的操作。问题是所有脚本都在同一个会话中执行,因此变量名称在所有线程中共享。

总结一下:

  • 每个帖子使用System.exec(...)或等效文件来运行ksh脚本

  • ksh脚本使用变量来存储运行SQL查询的状态。

在这种情况下,不会在正在运行的脚本的不同实例之间共享ksh变量。每个ksh实例都有自己的变量集。

对于这里发生的事情,必须有另一种解释。


你说if [ $var_$val -eq 0 ]; then ...给出了错误的答案。我不惊讶。 $var_$val不可能扩展为数字,因此查看它是否为零的测试将始终失败。