Perl Net :: SSH :: Perl没有加载我的环境变量vs通过SSH连接

时间:2010-09-08 07:29:10

标签: perl ssh export terminal environment

我的问题是连接throguh Net :: SSH :: Perl vs通过SSH连接。 我的shell变量(命令: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 个答案:

答案 0 :(得分:1)

对于环境变量,听起来~/.bashrc没有获得来源。你应该能够自己采购:

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

对于终端,许多任务不需要分配pty,因此通常不会对非交互式shell进行分配;但是,您可以在创建ssh对象时传递use_pty选项,以告知它创建pty

来自Net::SSH::Perl documentation

  

use_pty

     

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

     

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

答案 1 :(得分:1)

Chas,不能用作Net :: SSH :: Perl(以及大多数其他Perl SSH客户端)在新的shell会话中运行每个命令,因此副作用不会在命令之间持续存在。 / p>

解决方案是将两个命令组合如下:

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