2012-05-02 98 views
0

我想从shell脚本输入irb,执行一些操作,然后返回到shell脚本。从Shell脚本进入和退出子进程

我该怎么做?

#!/bin/bash 
#example_app 

# Some shell instructions here 
irb 
four = 2 + 2 
exit 
echo "This text is not reached and the process hangs open" 

注:我不应该尝试加载IRB进入静态代码,我同意你们。我没有想到我在做什么。我正在与一个AWS库进行交互,并试图将相同的理念带入自动化过程中,而不用再考虑两次。

+0

你在寻找类似'eval'的东西吗?或者你真的需要一个新的过程吗? –

+0

我不确定你在问什么。根据[irb手册页](http://linux.die.net/man/1/irb)来判断,你可能正在寻找[expect](http://linux.die.net/man/1) /期望)。 –

+0

我试图从shell脚本执行一系列ruby命令,如果手动输入'irb',它可以从ruby控制台完美地工作。一个非常简单的解释我需要的是[一个shell脚本,可以输入irb,执行某些操作,然后返回shell脚本'echo'完成!“] – Dru

回答

2

您可以通过一个在这里文档irb

irb <<SCRIPT 
    four = 2 + 2 
    puts four 
SCRIPT 

但是,我认为这不会完成你正在尝试做的事情。以下是输出:

Switch to inspect mode. 
    four = 2 + 2 
4 
    puts four 
4 
nil 

它与bash -x类似。为什么不简单地使用普通旧ruby这个?

ruby <<SCRIPT 
    four = 2 + 2 
    puts four 
SCRIPT 
4 

没有必要,如果你不打算互动用它酿出的互动壳。

0

我想你想要的答案从 fork and exec in bash 基本解释说:

function_to_fork(){ IRB }

function_to_fork &

,如果你希望有一定的相互作用,可能无法正常工作影响父进程或父进程等待。

我的评论下面没有格式化得非常好:

用下面的节目,我是能够实现:

#!/bin/bash 
# irbb.sh 
irb 
echo "here" 

$ ./irbb.sh 
>> four = 2 + 2 
=> 4 
>> exit 
here 
+0

我不认为这回答了这个问题。 OP基本上想要在另一个shell中运行一些命令,然后按顺序返回到他的脚本,而不是并行。 –

+0

我尝试了你的建议。该过程不像以前那样挂起,而是在fork之后的shell命令没有得到执行,fork内部的代码似乎没有被执行。 (实际的Ruby代码,包括存储文件,我手动测试这和它的作品这就是我是如何能够将它隔离到这个shell脚本。) – Dru

+0

用下面的节目,我是能够实现: #! /斌/庆典 #irbb.sh IRB 回声 “这里” $ ./irbb.sh >>四= 2 + 2 => 4 >>退出 这里 – Ecuageo