我使用Renci SSH.NET库创建了一个程序。它发送所有命令并正常读取结果。但是,当我发送以下命令时:
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
style="?android:attr/spinnerDropDownItemStyle"
android:singleLine="true"
android:background="@color/white"
android:textColor="@color/text_gray"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeightSmall"
android:ellipsize="marquee"
local:MvxBind="Text Caption" />
程序无限期地挂在这行上。
对正在发生的事情有什么解释?
答案 0 :(得分:3)
AFAIK,cli
是一种Shell /交互程序。因此,我想您已经尝试过执行以下操作:
client.RunCommand("cli");
client.RunCommand("cli subcommand");
错了。 cli
将一直等待子命令,并且永远不会退出,直到您使用相应的命令(例如exit
)将其明确关闭为止。并且在退出后,服务器将尝试执行cli subcommand
作为单独的顶级命令,同样也会失败。
您必须将“ cli子命令”提供给cli
命令的输入。但是不幸的是,SSH.NET不支持通过SshClient.RunCommand
/ SshClient.CreateCommand
接口提供输入。
您必须打开一个shell会话(否则不建议使用这种方法来自动执行命令)。
使用SshClient.CreateShellStream
或SshClient.CreateShell
并将命令发送到其输入:
"cli\n" + "cli subcommand\n"
有关示例代码,请参见Providing subcommands to a command (sudo/su) executed with SSH.NET SshClient.CreateShellStream或C# send Ctrl+Y over SSH.NET。