【发布时间】:2018-02-14 00:57:37
【问题描述】:
我正在尝试在 ruby shell 中运行 PHP 脚本。虽然如果我直接在 ssh 终端中使用 sn-p 它可以完美运行,但如果使用 ruby 执行它会返回错误:
zsh:1: command not found: php
将下面的脚本与ls 之类的命令一起使用可以正常工作。
require 'rubygems'
require 'net/ssh'
host = "abc.de"
user = "user_xy"
pass = "user_pass"
begin
Net::SSH.start(host, user, :password => pass) do |ssh|
$a = ssh.exec! "cd xy_dir && php abc.phar do_this"
ssh.close
puts $a
end
rescue
puts "Unable to connect to #{host}."
end
如何使用Net::SSH 运行 PHP?
感谢您的帮助
【问题讨论】:
-
1) 您是否尝试过在 Ruby 中执行
`ssh host password command`?这可能有助于缩小问题的范围。 2)我建议删除ssh.close命令;当块终止时,ssh 会话将自动关闭。 (带有块的 File.open 也可以这样工作。) 3)您可能需要在传递给 shell 的任何字符串上使用Shellwords.escape。 4) 你不应该需要require 'rubygems'。 5) 你确定两种情况(成功和失败)都在同一台主机上运行吗? -
关于上面的(1),问题可能与SSH运行命令的环境有关。主机上的 PHP 可执行文件在哪里?当您 ssh 到机器时,该文件夹是否在
$PATH中? -
@KeithBennett 1) 我不确定你的意思。我只是在学习 Ruby,但我对 Javascript 和 PHP 有一些经验。 2)好的, ssh.close 被删除。 3) 我试过 Shellwords.escape 但它返回 zsh:1: no such file or directory: ... 4) 谢谢,也删除了 5) 是的,绝对。我复制并粘贴了命令并运行。
-
@TomLord 你能具体说明你的意思吗?就像我上面所说的,sn-p 正在运行。代码示例中的缩短版本实际上指向实际文件中的 ~/.php/abc.phar。
-
@D.Ne 在命令行上执行
php时,实际运行的是什么可执行文件?试试看:which php,也看。现在,运行:echo $PATH,您还应该看到php可执行文件所在的文件夹。现在,尝试通过 ruby 脚本执行上述操作。有什么区别?