0

我目前正在用 C# 制作一个类似文件对话框的表单,用于浏览 unix 服务器上的目录。我在让“cd ..”命令工作时遇到了一些麻烦。

这是我的代码示例

    var sshExec = new SshExec("192.x.x.x", "user", "pass");
    sshExec.Connect();
    var err = string.Empty;
    var out = string.Empty;
    sshExec.RunCommand("pwd", ref out, ref err);
    Console.Writeline(out);
    sshExec.RunCommand("cd ..");
    sshExec.RunCommand("pwd", ref out, ref err);
    Console.Writeline(out);

我尝试过其他格式,例如cd ..or $"cd .." 但我似乎仍然在同一个目录中。我想每次我使用 RunCommand() sshExec 都会创建一个新事务,因此我会留在同一个目录中。

任何人都知道我怎样才能使这项工作?

4

1 回答 1

0
sshExec.RunCommand("pwd", ref out, ref err);
sshExec.RunCommand("cd ..");
sshExec.RunCommand("pwd", ref out, ref err);

每次调用RunCommand()都会创建一个单独的通道,该通道独立于其他通道运行。在常见情况下(与 unix 服务器建立 ssh 连接),每个通道将调用一个单独的 shell 实例。在一个通道中运行这样的命令cd不会影响在不同通道中启动的后续命令。

为了做你想做的事,你必须安排在同一个RunCommand调用中运行命令序列。假设远程服务器是一个调用 shell 的 unix 服务器bash,你可以使用 shell 语法,例如:

sshExec.RunCommand("pwd && cd .. && pwd", ref out, ref err);
于 2017-11-28T15:11:57.657 回答