ssh - 从 TCLSH 执行时无法退出 SSH
问题描述
我有通过 SSH 从 TCL 控制台登录终端并从该终端重新启动 tcl 脚本的硬性要求。为此,我使用 exec 命令,它确实被执行了。唯一的问题是它不会返回父代码。
我有自动 SSH 登录,它在 bash/csh 终端上运行良好
但是从 TCL 控制台,会发生以下情况
简单的例子
exec ssh hostname pwd
puts "Done"
当我在 TCL 中执行此代码时,永远不会打印“完成”。我只是得到 pwd 的输出,就是这样。
我需要将 SSH 循环到多个终端并在硬件上运行 TCL 作业,但在执行第一个 SSH 后循环卡住了。
我在互联网上搜索答案,但我找不到任何答案。请帮忙。
解决方案
这里可能会发生很多问题。使用显式命令 (pwd) 运行 ssh 通常默认为不分配 tty (ssh -T),并将以非交互模式运行远程 shell。并且从 exec 调用的命令的输出通常不会回显到标准输出,因此如果您从脚本调用它,我不希望您看到输出。您必须打印 exec 的结果才能看到 pwd 命令的输出。此外,根据帐户设置的 shell 以及它是交互式还是非交互式 shell,在远程主机上运行不同的 shell 启动脚本。它可以是 .bashrc、.bash_profile、.profile、.cshrc 等,如果脚本在有 tty 时与没有时表现不同,这可以解释 bash/csh shell 和TCL控制台。
如果无法访问您的系统,我很难进行故障排除。我将从这样的脚本开始:
set result [exec ssh -T hostname pwd]
puts "result = $result"
puts "Done."
然后我会尝试将 -T 更改为 -t 并再次尝试。如果“pwd”的输出出现在“result =”行之前,那么您可以判断该命令正在将结果写入 tty 而不是标准输出,这是对故障排除有用的信息。
推荐阅读
- angular - 需要重新加载浏览器才能看到通知长度
- css - 如何在 QLineEdit 和 QPushButton 中仅为边框的一侧设置样式表?
- java - Lombok 1.18.0 和 Jackson 2.9.6 不能一起工作
- sparql - RDF 和 SPARQL:如何请求作为子类的属性的对象
- mysql - SQL Join 2个表并得到相应的答案
- javascript - 如何删除仅在当前网页中的所有“iframe”标签?
- angular - 在指令上使用 *ngIf
- python - 无法在 python 3.6 中将 str 转换为浮点数
- android - SDK 22 是否支持 BottomNavigationView?
- python - 当省略字符串中的任何非数字字符时,为什么这些字母会保留?