Progress UNIX 命令和变量行为

Progress UNIX Command and Variable Behavior

我对 Progress 还是个新手,我对 "Unix" 命令有疑问。

我有一个存储了 unix 命令的数据库,在本例中它们都是打印命令。我一直在写一个搜索表单来查找用户在过去几周打印的项目。找到他们想要的项目后,用户应该能够重新打印作业。它有效,直到我重新运行命令。

UNIX 静默 tCMD。

会按字面意思运行 "tCMD"中的shell,而不是变量的值。也许我在这里遗漏了一些基本的东西,但我不确定为什么单独使用 Unix 命令似乎无法按我希望的方式工作。

尝试

UNIX SILENT VALUE(tCMD).

一些上下文:有些事情可以在进行中进行硬编码,例如要输出或输入的文件名,或者 unix 命令的值(试试 UNIX ls,你会得到一个 ls 结果,即使它不是一个变量或用引号括起来。仍然是解释器 "knows" 你想做什么)。这是其中一个案例。正如我所说,它也适用于 input/output 操作,例如 INPUT FROM cMyFile。如果 cMyFile 是一个变量,那么我应该编码

INPUT FROM VALUE(cMyFile).

查看 OS-COMMAND 语句而不是 UNIX。它将帮助您编写更可移植的代码(即使向操作系统发出的实际命令当然需要适合您的特定 os)。

还有一些内置命令更好用(因为兼容性),而不是通过 OS-COMMANDUNIXDOS:

发出命令
To copy a file:
OS-COPY source target

To delete a file:
OS-DELETE file

To rename a file:
OS-RENAME source target

To append a file with another (ie cat):
OS-APPEND source target

To create a directory:
OS-CREATE-DIR directory

To delete a file or directory:
OS-DELETE file [RECURSIVE]

To get an environment variable 
OS-GETENV variable

To list attached drives (windows only):
OS-DRIVES

To list files in a directory you should do:
INPUT FROM OS-DIR directory. 

If an error occurs in an OS-* command you can use OS-ERROR to check for the    
error.

一般这些语句中的文件目录和命令可以用

寻址
file.txt 

VALUE("file.txt").

另请查看 OPSYS 函数,它将 return 您当前使用的操作系统。

因此,如果您想将命令存储在变量中,请使用 VALUE。我倾向于总是使用 VALUE,因为我认为它更具可读性。

DEFINE VARIABLE cCommand AS CHARACTER NO-UNDO.

IF OPSYS = "UNIX" THEN
  ASSIGN 
    cCommand = "ls -l".
ELSE 
  ASSIGN
    cCommand = "dir".

OS-COMMAND VALUE(cCommand).