我为此绞尽了脑汁。我查看了所有谷歌搜索结果,发现 /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.