我正在开发一个二进制可执行程序命令来执行程序并将输出返回到文本字段中。
命令的参数涉及命令本身,因为它将在命令行上键入,以及目录。所以执行操作的例程首先切换到目录,然后执行命令。
例如,如果我想some.cmd在目录中执行命令,/home/user参数是command = 'some.cmd'和directory = '/home/user'。
我发现这some.cmd是行不通的,但如果我将命令更改为/home/user/some.cmd命令有效。但是该命令ls -l有效。我还注意到cd无法识别该命令。如果我通过ssh设置命令远程运行它,ssh user@localhost 'cd /home/user && ./some.cmd'它就可以工作。
似乎在 shell 中执行命令时存在的某些设置在直接运行时不存在,但是通过这样做ssh似乎可以为其创建设置。
对此有什么解释吗?
更新:
经过一些查询,我了解到用于执行命令的 API 没有在 shell 中执行,或者没有在控制台可用的正常环境中执行。使用/bin/sh -c "cd ..."选项执行命令后,问题不再存在。这是ssh user@localhost 'command ...'给我的环境。我不太确定技术细节,但显然,当您在普通 shell 中执行时,可用环境的存在并不总是可用于由操作系统直接执行的命令。
当您尝试执行文件时,系统必须知道如何找到该文件。这就是为什么如果您指定它的完整路径它会起作用。shell 还具有一个PATH环境变量,用于存储要查找的目录列表以查找可执行文件。这就是为什么您不必为ls.
| 归档时间: |
|
| 查看次数: |
4545 次 |
| 最近记录: |