我正在为此拔头发。我查看了 /dev/tty 的所有谷歌结果:没有这样的设备或地址,它们都不适用于我正在做的事情/没有一个解决方案是成功的。
我有一个脚本,可以通过 SSH 连接到另一台机器(使用公钥)并自行运行(使用不同的参数 - 它不会循环)。调用这个 rpmInstallScript.bash
在脚本的某一时刻,它运行 rpm -ivh 来安装一些 RPM 包。在安装这些软件包之一的过程中,会在 /var/tmp 中放置一个名为 rpm-tmp 的文件。[6 个随机字符]
这个文件是一个脚本,我猜它是在 rpm 安装过程中的某个时刻执行的。
在脚本中,有多次出现
echo [something] > /dev/tty
Run Code Online (Sandbox Code Playgroud)
或者
echo [something] | tee [something] > /dev/tty.
Run Code Online (Sandbox Code Playgroud)
所有这些事件都以 /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
Run Code Online (Sandbox Code Playgroud)
其中 rpmInstallScript.bash 运行 rpm -ivh,放置在 /var/tmp 中的结果脚本使用 >/dev/tty - 这就是失败的原因 …
我熟悉使用 tee,我知道我可以简单地记录输出
script.sh | tee file.log
Run Code Online (Sandbox Code Playgroud)
但是,我想要一个无缝的用户界面。有没有办法在 script.sh 中像上面那样运行 tee ?在这个脚本中,有数百个回声和许多其他正在运行的脚本,很难将每个脚本单独附加到文件中。
我仍在处理另一个问题中的错误,由于无法获得调试信息,该错误没有得到解答。
我有运行其他脚本的脚本,我需要查看 tty 如何与终端断开连接。
有没有办法全局“设置-x”?我无法在问题脚本中设置它,因为它是动态生成的,不是我自己生成的,但我想看看它有什么问题。
我知道默认情况下,创建目录可能是一个坏主意,但是我相信没有理由不允许 mount 使用选项创建目录。
缺少功能是否有原因,或者它只是尚未实现?
很多时候我在两个目录之间工作。虽然很高兴能够
/working/dir/1 $ pushd /other/working/dir
/other/working/dir $ do something
/other/working/dir $ popd
/working/dir/1 $ do something else
/working/dir/1 $ pushd /other/working/dir
Run Code Online (Sandbox Code Playgroud)
如果 popd 调用压入/other/working/dir堆栈,那将是很好的,这样我就可以在两个目录之间来回调用 popd。
这样的事情可能吗?