2010-09-08 61 views
1

我的问题是连接throguh Net :: SSH :: Perl与通过SSH连接。我的shell变量(command:export)不一样。Perl Net :: SSH :: Perl没有加载我的环境变量vs通过SSH连接

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

例如:

,如果我通过perl的执行(净:: SSH :: Perl的)命令: “出口”,我得到:

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的执行(净:: SSH :: Perl的)命令: “TTY” 我得到:

not a tty 

,同时通过定期SSH执行相同的命令连接我得到:

/dev/pts/3 

我在这里错过了什么?

+0

你可以张贴一些示例代码和什么是应该做的,以帮助解决使用您的过程? – 2010-09-08 11:07:39

回答

1

对于环境变量,听起来像~/.bashrc没有来源。你应该可以自己采购它:

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

对于终端,分配pty是没有必要的很多任务,所以它通常不用于非交互shell完成的;但是,您可以在创建ssh对象时通过use_pty选项,告诉它创建一个pty

Net::SSH::Perl documentation

use_pty

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

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

+0

仍然没有工作... – 2010-10-18 08:52:07

1

Chas,这不会作为Net :: SSH :: Perl(并且就此而言,大多数其他Perl SSH客户端)在新shell会话中运行每个命令,因此副作用不会在命令。

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

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