gpt4 book ai didi

java - 为什么 ls ~ 或 ls $HOME 在进程中不起作用?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:46:07 26 4
gpt4 key购买 nike

我使用 Process 来调用 shell(zsh),我想 cd ~ 或其他一些目录,例如在 shell 中定义的 cd $PROJ_ROOT。但似乎无法处理这些 token 。如何解决这个问题?

scala> import scala.sys.process._
import scala.sys.process._

scala> "ls ~".!!
ls: ~: No such file or directory
java.lang.RuntimeException: Nonzero exit value: 2
at scala.sys.package$.error(package.scala:27)
at scala.sys.process.ProcessBuilderImpl$AbstractBuilder.slurp(ProcessBuilderImpl.scala:132)
at scala.sys.process.ProcessBuilderImpl$AbstractBuilder.$bang$bang(ProcessBuilderImpl.scala:102)
... 33 elided

最佳答案

波浪号扩展(以及 globbing、参数扩展等)由 shell 执行。运行该进程不会调用 shell,因此不会执行替换。

实现这一点的唯一方法是自己调用 shell:

Seq("/bin/sh", "-c", "ls ~").!!

编辑:我最初的建议 "/bin/sh -c ls ~" 实际上不起作用,因为它总是列出当前目录并忽略波浪号争论。将命令行拆分为如上所示的序列似乎是实现此目的的安全方法。

关于java - 为什么 ls ~ 或 ls $HOME 在进程中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30048898/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com