使用变量“值”;定义变量“名称”;在康壳中

发布于 2024-12-07 16:00:13 字数 588 浏览 0 评论 0原文

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

Java 线程 - |同一场会议| | | Java 线程 - - |相同的脚本| | | Java 线程 - - - |相同的变量名 | | |
Java 线程 - - | (这同一个变量 | |名字可能会导致| Java 线程 - |不一致)|

如果没有,那么有人可以提出替代方法吗?其中一个重要方面是,JAVA 部分是一个服务器程序,并且将运行很长时间,因此我需要手动“取消设置”这些变量。 (如果我使用数组来存储所有这些,我就无法做到这一点)

My program involves a number of JAVA threads calling a KornShell (ksh) script file with different parameters. This script file in turn calls some SQL commands
which return some status. I store this status in a variable as a part of the script and check the value returned from SQL and take appropriate actions.
The problem is that all scripts are being executed in the same session and thereby the variable name gets shared across all threads. Since these threads are working asynchronously, I want this link to be broken. The easiest solution that I could come up with was to have a different variable for each thread (use some input parameter to the script as an identifier) but this would mean that the name of that variable needs to be dynamic. That is, I should be able to use the value of a variable in the name of another variable.
Is this even possible? If it is then how do I do it ?

Java Thread - | Same session |
| |
Java Thread - - | Same Script |
| |
Java Thread - - - | Same var name |
| |
Java Thread - - | (This same var |
| name can cause |
Java Thread - | Inconsistencies)|

If not, then can anyone suggest an alternative approach? An important aspect of this is the far that the JAVA part is a server program and will be running for extended durations so I will need to 'unset' these variables manually. (Something I can't do if i am using an array to store all of these)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

银河中√捞星星 2024-12-14 16:00:13

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

总结一下:

  • 每个线程使用 System.exec(...) 或等效的方法来运行 ksh 脚本

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

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

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


你说 if [ $var_$val -eq 0 ];然后...给出了错误的答案。我并不感到惊讶。 $var_$val 不可能扩展为数字,因此检查它是否为零的测试总是会失败。

... I store this status in a variable as a part of the (ksh) script and check the value returned from SQL and take appropriate actions. The problem is that all scripts are being executed in the same session and thereby the variable name gets shared across all threads.

So to summarize:

  • each thread uses System.exec(...) or equivalent to run a ksh script

  • the ksh script uses a variable to store the status from running an SQL query.

In this scenario, the ksh variable will NOT be shared between the different instances of the running script. Each ksh instance has its own variable set.

There must be another explanation for what is going on here.


You say that if [ $var_$val -eq 0 ]; then ... gives the wrong answer. I'm not surprised. $var_$val cannot possibly expand to a number, so the test to see if it is zero will always fail.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文