代码之家  ›  专栏  ›  技术社区  ›  Ricky Levi

perl net::ssh::perl不加载我的环境变量而不是通过ssh连接

  •  1
  • Ricky Levi  · 技术社区  · 15 年前

    我的问题是通过ssh连接throguh net::ssh::perl和连接。 我的shell变量(command:export)不同。

    这个事实阻止我执行依赖shell env vars的用户脚本。

    例如:

    如果我通过perl(net::ssh::perl)执行命令:“export”,我得到:

    MAIL=/var/mail/username
    PATH=/usr/local/bin:/bin:/usr/bin
    PWD=/username
    SHELL=/bin/ksh
    SSH_CLIENT='myIPAddress 1022 22'
    SSH_CONNECTION='myIPAddress 1022 remoteIPAddress 22'
    USER=myusername
    

    当通过常规的ssh连接执行相同的命令时,我得到42行env vars。

    其他示例:

    如果我通过perl(net::ssh::perl)执行命令:“tty”,我会得到:

    not a tty
    

    通过常规ssh连接执行相同命令时,我得到:

    /dev/pts/3
    

    我这里缺什么?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Chas. Owens    15 年前

    对于环境变量,听起来 ~/.bashrc 无法获取源代码。您应该能够自己找到它:

    $ssh->cmd(". ~/.bashrc");
    

    对于终端,分配 pty 对于许多任务来说都不是必需的,因此通常不会对非交互式shell执行此操作;但是,您可以通过 use_pty 选项创建ssh对象时,告诉它创建 PTY .

    来自 Net::SSH::Perl documentation :

    使用私人

    如果要在远程计算机上请求伪tty,请将此设置为1。只有在设置shell连接时(请参见下面的shell方法),这才真正有用;在这种情况下,除非您明确拒绝了一个pty(通过将use-pty设置为0),否则它将自动设置为1。换句话说,你可能不需要经常使用这个。

    如果启动shell,则默认值为1,否则为0。

        2
  •  1
  •   salva    15 年前

    chas,它既不能作为net::ssh::perl(也就是说,大多数其他perl ssh客户机)在新的shell会话中运行每个命令,因此在命令之间副作用不会持久。

    解决方案是按如下方式组合这两个命令:

    $ssh->cmd(". ~/.bashrc && $cmd");