/dev/tty:没有这样的设备或地址 - 仅在脚本中

/dev/tty:没有这样的设备或地址 - 仅在脚本中

我为此绞尽了脑汁。我查看了所有谷歌搜索结果,发现 /dev/tty : 没有这样的设备或地址,没有一个适用于我正在做的事情/没有一个解决方案是成功的。

我有一个脚本,它通过 ssh 连接到另一台机器(使用公钥)并自行运行(使用不同的参数 - 它不循环)。将其命名为 rpmInstallScript.bash

在脚本的某一时刻,它运行 rpm -ivh 来安装一些 RPM 包。在安装其中一个包的过程中,会在 /var/tmp 中放入一个名为 rpm-tmp 的文件。[6 个随机字符]

这个文件是一个脚本,我猜测它是在 rpm 安装期间的某个时刻执行的。

在脚本中,多次出现

echo [something] > /dev/tty 

或者

echo [something] | tee [something] > /dev/tty.

所有这些情况都会失败,并显示 /dev/tty:没有这样的设备或地址。如果我手动 ssh 进入机器并自己 rpm 软件包,运行 rpm-tmp 脚本或运行 rpmInstallscript.bash,它就可以正常工作。

我正在使用 ssh -t 连接到远程机器,因此应该有一个 tty,对吗?

我不明白为什么这不起作用,尤其是因为手动执行,即使没有 -t 选项,也可以正常工作。我唯一能想到的是它不是一个交互式会话 - 但 /dev/tty 应该仍然存在,对吗?

编辑-错误原因如下:

ssh -t root@[machine] -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null <<DONE
./rpmInstallScript.bash

其中 rpmInstallScript.bash 运行 rpm -ivh,放置在 /var/tmp 中的结果脚本使用 >/dev/tty - 这就是失败的原因

再次编辑:使用 -tt 得到:

tcgetattr: Inappropriate ioctl for device

仅当从脚本运行时 - 手动运行 ssh -tt 然后 echo test >/dev/tty 才能正常工作。

我只能假设这是强制创建 tty 失败。

还有其他方法可以“生成”tty吗?我可以通过创建一个名为 /dev/tty 的文件来欺骗它吗?

答案1

尝试一下-tt看看是否有效。

从 ssh 手册页中,

Multiple -t options force tty allocation, even if ssh has no local tty.

相关内容