2

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

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

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

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

4

3 回答 3

2

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

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

祝你好运。

于 2019-07-12T17:17:55.497 回答
1

需要注意的一件事是,如果您有一个 LOGIN 段落或其他自动运行以启动您的应用程序的内容(这很常见),那么您需要找到一种方法来绕过非交互式用户。

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.
于 2019-07-12T17:37:14.093 回答
0

Van Amburg 的答案对于处理多行输入是最正确的。我使用的变体不是<<多行字符串的命令,我只是在单个命令周围添加了引号(单引号和双引号都可以):

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

于 2019-07-12T17:59:39.117 回答