通过ruby -e运行整个脚本的最佳方法

时间:2012-08-29 16:56:12

标签: ruby shell

我一直想在远程计算机上运行一些ruby脚本(在bash shell中)

我可以创建一系列ruby -e "<command>"的bash命令,但其中一些脚本超过100行。

ruby -e与HEREDOC或%{}&amp; eval()对单引号和双引号的混合不起作用。

有没有更好的方法来尝试这个?

编辑:

正在使用的协议是Apple Remote Desktop,它在远程shell的范围内执行这些命令。

4 个答案:

答案 0 :(得分:4)

如果我理解正确,您希望通过SSH或类似协议在远程计算机上运行本地ruby脚本。如果脚本是非交互式的(即不需要任何用户输入),则可以在本地创建并通过stdin传递。

换句话说,首先编写脚本并将其保存在本地,例如foo.rb。然后:

ssh remotehost ruby < foo.rb

启动SSH会话并执行远程ruby解释器。没有参数,ruby解释器从标准输入执行命令,因此我们用stdin上的程序提供SSH。

答案 1 :(得分:1)

这有效:

cat << 'EOF' > /tmp/myscript.rb

# ruby script contents go here. any syntax is valid, except for your limit string (EOF)

EOF

ruby /tmp/myscript.rb;
rm /tmp/myscript.rb;

由于这并不依赖于解释器二进制文件如何处理stdin风格的命令,因此它也适用于大多数其他语言(python,perl,php)。

答案 2 :(得分:1)

因为我想通过ARD运行ruby脚本(我认为它不能嵌入ctrl-D),我首先想到你可以结合joraff的解决方案(对他自己的问题)与凯文的:

cat << ENDOFSCRIPT | ruby

#Here be code ...

ENDOFSCRIPT

保存创建/删除文件。

但是还有更好的方法:

事实证明,ARD嵌入了一个EOF,或者只是以其他方式终止它所发送的内容:

ruby

#Paste whole script here

至少在ARD 3.6.1中起作用。赢了!

答案 3 :(得分:0)

为什么不首先发送脚本?

scp foo.rb remotehost:
ssh remotehost "ruby foo.rb"

您甚至可以在以下情况后清理文件:

ssh remotehost "rm foo.rb"