Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash SSH-herdoc在另一台服务器上运行Perl脚本可以';我找不到正确的道路_Bash_Perl_Shell_Ssh_Ksh - Fatal编程技术网

Bash SSH-herdoc在另一台服务器上运行Perl脚本可以';我找不到正确的道路

Bash SSH-herdoc在另一台服务器上运行Perl脚本可以';我找不到正确的道路,bash,perl,shell,ssh,ksh,Bash,Perl,Shell,Ssh,Ksh,我在server_B上有一个Perl程序,它使用Perl DBI和5.010,在server_B终端上运行良好。我从一个shell脚本运行它,该脚本首先准备一些参数,然后将它们传递给Perl程序,一切正常 我需要在服务器_a上运行一个shell脚本,该脚本将在服务器_B上执行该脚本。这是因为Perl程序创建了几个文件,我想将这些文件SFTP回服务器_a。这是我在服务器_a上运行的脚本: ssh server_B <<- EOF perl/update.sh EOF 同样,5

我在server_B上有一个Perl程序,它使用Perl DBI和5.010,在server_B终端上运行良好。我从一个shell脚本运行它,该脚本首先准备一些参数,然后将它们传递给Perl程序,一切正常

我需要在服务器_a上运行一个shell脚本,该脚本将在服务器_B上执行该脚本。这是因为Perl程序创建了几个文件,我想将这些文件SFTP回服务器_a。这是我在服务器_a上运行的脚本:

ssh server_B <<- EOF
    perl/update.sh
EOF
同样,5.10在server_B上运行良好,但在server_A上的Perl版本是5.8.8

  • 所以我放弃了使用5.010;因为这实际上是不必要的,但是我的模块(DBI和DBD::mysql)也有类似的问题。我得到:

  • 我本来希望对update.sh的ssh-herdoc调用(从服务器_A)能够像在服务器_B上调用update.sh一样运行,但是它似乎在尝试使用服务器_B上的服务器_A上的程序,我觉得这很奇怪。有人能帮我理解为什么会这样吗?我觉得我误解了ssh工作原理的一些基本原理

    服务器是带有ksh的AIX

    服务器是带有bash的AIX

    编辑-由于你们中的一些人投票认为我还没有完成我的研究,以下是我尝试过的其他方法。我没有提到,因为我不完全理解他们,这些只是基于其他SO帖子和直觉的猜测。如果我给人的印象是我知道自己在说什么,那就太虚伪了

    如果这是重复的,我应该看哪个问题?如果这是一个“只是阅读手册的情况”,哪一个?我应该找什么

    • 阅读man ssh寻找与环境变量相关的线索,没有发现任何我理解的东西
    • 试着用-t跑
    • 试着用-t-t跑
    • 使用ssh远程登录并手动运行它-这确实有效
    • 在更新脚本中获取了我的.bash_配置文件
    • 尝试在ssh时将路径重新分配为远程服务器的路径
    • 已尝试使用不同的分隔符来分隔

    • 我找到了一个完美的解决方案。我无法让它与~/.bashrc、~/.bash\u profile或~/.ssh/rc一起工作,但仍然不确定为什么它即使在源代码中也没有提取我的环境变量

      因为它在我手动ssh-in然后逐个运行命令时工作,所以我使用这些参数在强制交互登录中运行ssh

      ssh server_B bash --login -i "~/perl/update.sh"
      
      有关更多信息,请参见这些:

      希望这对将来的人有用。谢谢你的帮助,赛戈

      Can't locate DBI.pm in @INC (@INC contains.. [my Perl PATH from server_A])
      at perlfile.pl line 4
      
      ssh server_B bash --login -i "~/perl/update.sh"