从 Shell 调用 UniVerse 命令

Call UniVerse Command from Shell

我有一个 UniVerse (Rocket U2) 系统,希望能够从 shell 脚本中调用某些 UniVerse/TCL 命令。但是,每当我 运行 uv 二进制文件时,它似乎会停止执行 shell 脚本的其余部分。

例如,如果我 运行: /u2/uv/bin/uv

它启动一个 UniVerse 会话。脚本的下一行 (RUNPY run_tests.py) 旨在在 TCL 环境中执行,但绝不会输入到 TCL。我尝试将字符串参数传递给要执行的 uv 二进制文件,但似乎没有执行任何操作。

有没有办法从 UNIX/Shell 环境中调用 UniVerse/TCL 命令?

您可以手动输入或将其放入 shell 脚本中。我没有 运行 对此范例有任何问题,但你选择 shell 理论上可能会影响这一点。您当然希望位于您要在其中执行它的帐户的目录中,或者在脚本中 cd 到它。

/u2/uv/bin/uv <<start
RUNPY run_tests.py
start

祝你好运。

需要注意的一件事是,如果你有一个 LOGIN 段落或其他自动运行以启动你的应用程序的东西(这很常见),那么你需要找到一种方法来绕过它 non-interactive 用户。

https://groups.google.com/forum/#!topic/comp.databases.pick/B2hzuXq3X9A 提及

IF OCONV(@TTY,'MCU')='PHANTOM' THEN ABORT

在 UD 中,我从 unix 启动脚本作为幻影,以 a) 捕获 PH 中的日志输出和 b) 如果请求额外输入,则结束进程,而不是闲逛。在 UD 中是

$echo "PHANTOM COUNT VOC" | udt
UniData Release 8.1  Build: (2008)
Current UniData home is /unidata/ud81/.
Current working directory is /usr/ud81/demo

:PHANTOM COUNT VOC
PHANTOM process 18743448 started.
COMO file is '_PH_/dsiroot45172_18743448'.
:
Critical abort condition found.

$cat _PH_/dsiroot45172_18743448
COUNT VOC
14670 record(s) counted.
PHANTOM process 18743448 has completed.

最适合处理多行输入。我使用的变体不是 multi-line 字符串的 << 命令我只是在单个命令周围添加引号(单引号和双引号都有效):

/u2/uv/bin/uv "RUNPY run_tests.py"