我对Progress还是个新手,我有一个关于"Unix"命令的问题。
我有一个存储unix命令的数据库,在这种情况下,它们都是打印命令。我一直在编写一个搜索表单,以查找用户在过去几周内打印的项目。在找到他们想要的项目之后,用户应该能够重新打印作业。它可以工作,直到我重新运行命令。
UNIX SILENT tcp .
将在shell中运行"tCMD",而不是变量的值。也许我在这里遗漏了一些基本的东西,但是我不确定为什么单独的Unix命令似乎不能像我希望的那样工作。
try
UNIX SILENT VALUE(tCMD).
一些上下文:有些东西可以在过程中硬编码,例如输出或输入的文件名,或者unix命令的值(尝试unix ls,即使它不是变量或括在引号中,您也会得到ls结果)。但解释器"知道"你想做什么)。这是其中一个例子。正如我所说,它也适用于输入/输出操作,例如input FROM cMyFile。如果cMyFile是一个变量,那么我应该编写
INPUT FROM VALUE(cMyFile).
查看OS-COMMAND
语句而不是UNIX
。它将帮助您编写更具可移植性的代码(即使向操作系统发出的实际命令当然需要适合您的特定操作系统)。
还有几个内置的命令,使用它们比通过OS-COMMAND
, UNIX
或DOS
发出命令更好(因为兼容性):
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
函数,它将返回您当前使用的操作系统。
所以如果你想在一个变量中存储一个命令,你可以使用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).