我的问题是连接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
我在这里缺少什么?
答案 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");