我一直想在远程计算机上运行一些ruby脚本(在bash shell中)
我可以创建一系列ruby -e "<command>"
的bash命令,但其中一些脚本超过100行。
ruby -e
与HEREDOC或%{}
&amp; eval()
对单引号和双引号的混合不起作用。
有没有更好的方法来尝试这个?
编辑:
正在使用的协议是Apple Remote Desktop,它在远程shell的范围内执行这些命令。
答案 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"