gpt4 book ai didi

java - 无法从 ProcessBuilder 使用 Bash 的 "-i"选项

转载 作者:太空宇宙 更新时间:2023-11-04 12:00:08 25 4
gpt4 key购买 nike

我的程序的目标是从 Java 运行交互式命令行可执行文件,因此我可以在需要时中途添加输入。基本上是重定向输入。

我找不到任何在线工作的东西,因为 -c 标志不允许交互,但后来我看到终端中的 -i 标志允许我如果我给它一个 .sh 文件,就可以使用交互式输入运行命令。

但是,当我尝试在 java 中使用这个标志时,它并没有起作用。我有单独的输入和输出线程,所以如果我能让它工作,这似乎很容易。

相关代码:

ProcessBuilder pb = new ProcessBuilder()
.directory(new File(testDir))
.inheritIO()
.command("bash", "-i"
,"executor.sh");

proc = pb.start();

这是我得到的错误:

bash: cannot set terminal process group (1469): Inappropriate ioctl for device
bash: no job control in this shell

如果我有办法让这个 -i 选项起作用,那么我会很感激指向其他东西的指针,这些东西可以让我获得交互式输入,因为我尝试过的其他方法似乎都无法解决这个问题。

最佳答案

bash -i与从 TTY 读取的能力完全无关。

相反,在您的脚本已经启动后, TTY 重定向:

#!/usr/bin/env bash
exec </dev/tty || { echo "ERROR: Unable to connect stdin to /dev/tty" >&2; exit 1; }
read -r -p "Fill out this prompt please: " value
echo "Read from TTY: $value"

命令exec </dev/tty/dev/tty 上的读取句柄替换脚本的标准输入 (FD 0) .如果您只想对单个命令执行此操作,而不是对整个脚本执行此操作,请输入 </dev/tty在该命令的末尾。

当然,这只有在您的进程运行在它一个控制终端的上下文中时才有效——但如果不是这样,您就无法从无论如何,用户都不会在 I/O 设备上获得某种句柄。

关于java - 无法从 ProcessBuilder 使用 Bash 的 "-i"选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52798635/

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