C# “错误”;未设置MyVar环境变量";使用SSH.NET执行shell命令时

C# “错误”;未设置MyVar环境变量";使用SSH.NET执行shell命令时,c#,shell,ssh,ssh.net,C#,Shell,Ssh,Ssh.net,我得到一个错误: 未设置MyVar环境变量 使用SSH.NET执行shell命令时,C#。我可以从PuTTY执行相同的命令,一切都很好 我的密码是 var client = new SshClient("myhost.mydomain", "user", "password"); client.Connect(); var cmd = "/path1/script.sh MyArgument"; var sshCommand = client.RunCommand(cmd); var outpu

我得到一个错误:

未设置MyVar环境变量

使用SSH.NET执行shell命令时,C#。我可以从PuTTY执行相同的命令,一切都很好

我的密码是

var client = new SshClient("myhost.mydomain", "user", "password");
client.Connect();
var cmd = "/path1/script.sh MyArgument";
var sshCommand = client.RunCommand(cmd);
var output = sshCommand.Result;
Console.WriteLine(output);
client.Disconnect();

启动非交互式会话(使用
RunCommand
)时,将运行一组不同的启动脚本和/或脚本中的不同路径(基于
TTY
变量)

因此,您的环境可能(很可能确实)有所不同。尤其是未设置
MyVar


解决办法是:

  • 修复启动脚本,即使在非交互式终端上也可以设置
    MyVar
    (首选)
  • 修改SSH.NET代码以在
    .RunCommand
    实现中发出
    sendpeudoterminalrequest
    请求(我没有测试这个)。有关示例,请参见
    Shell.Start()

Martin,我没有对shell脚本的写入权限。我尝试使用client.CreateShell创建shell,但无法读取扩展内容。下面是代码var shell=client.CreateShell(流内、流外、xOutStream);shell.Start();如果(shell.IsStarted){outString=newstreamreader(outStream.ReadToEnd();shell.Stop();}`这是问答网站,不是讨论论坛。我相信我已经回答了你的问题。如果它对你有帮助,考虑一下。为你的新问题贴一个新问题。马丁,问题还没有解决。我正在尝试CreateShell选项,以查看该选项是否有效,但我无法,因为扩展文本为空。所以我们需要检查一下如何解决这个问题。还尝试了其他方法,因为要求使用c#执行shell命令并获取输出文本。但是(原始)代码没有问题。服务器环境被破坏了。您是否至少具有启动脚本的读取权限,以了解为什么在非交互式会话中未设置
MyVar
?或者,您知道变量应该具有什么值,以便您可以尝试手动设置它吗?我能够解决这一问题—使用PLink命令行exe作为
PLink-batch
,后跟凭据和命令
/path1/script.sh MyArgument
。它工作得很好。如果没有别的办法,我将继续采用这种方法。但我仍然更喜欢CreateShell选项。您是否有任何示例代码可以帮助我创建shell、运行命令以及以文本形式读取输出流?