我需要从Scala脚本运行shell命令,我使用以下代码片段:
import scala.sys.process.{Process, ProcessIO}
val command = "ls /tmp"
val process = Process(command)
val processIO = new ProcessIO(_ => (),
stdout => scala.io.Source.fromInputStream(stdout).getLines.foreach(println),
_ => ())
process.run(processIO)
Run Code Online (Sandbox Code Playgroud)
代码工作正常.我想知道为什么我得到
java.io.IOException: Cannot run program "cd": error=2, No such file or directory
Run Code Online (Sandbox Code Playgroud)
一旦我改变了cd /tmp && ls
IMO相当于的命令ls /tmp
?
来自维基百科的cd
命令:
[...]在Unix系统上
cd
调用chdir()
POSIX C函数.这意味着当执行命令时,不会像其他命令那样创建新进程来迁移到其他目录ls
.相反,shell本身执行此命令.
在那里甚至有关于Java的引用:
[...] Java编程语言和Java虚拟机都不
chdir()
直接支持; 变更请求仍然开放了十多年,而负责Java的团队考虑了替代方案,尽管到2008年该请求在仅引入了有限的支持后被拒绝[...]
亲自尝试一下:
$ which ls
/bin/ls
$ which cd
$
Run Code Online (Sandbox Code Playgroud)
简单来说,cd
不是你可以运行的程序(进程)(比如/bin/ls
) - 它更像是一个命令行指令.
你想达到什么目的?在Java中更改当前工作目录?或者更改刚刚创建的流程的工作目录?