首页 > 解决方案 > 从 TCLSH 执行时无法退出 SSH

问题描述

我有通过 SSH 从 TCL 控制台登录终端并从该终端重新启动 tcl 脚本的硬性要求。为此,我使用 exec 命令,它确实被执行了。唯一的问题是它不会返回父代码。

我有自动 SSH 登录,它在 bash/csh 终端上运行良好

但是从 TCL 控制台,会发生以下情况

简单的例子

exec ssh hostname pwd
puts "Done"

当我在 TCL 中执行此代码时,永远不会打印“完成”。我只是得到 pwd 的输出,就是这样。

我需要将 SSH 循环到多个终端并在硬件上运行 TCL 作业,但在执行第一个 SSH 后循环卡住了。

我在互联网上搜索答案,但我找不到任何答案。请帮忙。

标签: sshtcl

解决方案


这里可能会发生很多问题。使用显式命令 (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 而不是标准输出,这是对故障排除有用的信息。


推荐阅读