2011-09-02 35 views
0

我有一个执行一系列命令的bash脚本。其中之一是一个本身创建shell的应用程序。如何让我的bash脚本在该子shell中执行命令?在执行另一个shell实例的bash脚本中处理I/O

实施例:

#!/bin/bash 
command1 
command2 
someapp 
command3 
command4 

“someapp”本质上是一个bash外壳(由供应商提供的 - 我的控制之外的),但它似乎产卵壳中而产卵等待另一种方法。这会导致bash脚本在someapp中等待,直到shell被关闭,然后执行命令3和4.我希望这些命令在someapp shell中执行。

任何指针,将不胜感激。

+1

是否someapp带参数或标准输入上的作用?如果没有,你可能需要使用[Expect](http://expect.sourceforge.net/) –

+0

与someapp进行交互你是否担心产生过多的子弹?和/或者你是否想让someapp接收由command3,4产生的输入?更多的细节可以帮助 – shellter

+0

someapp只对stdin起作用。它基本上是一个外壳:

 > someapp XYZ environment shell % 
所以我想命令3和4在THAT壳上执行。 – mpants4

回答

0

大多数shell采用允许指定命令的参数-c。从bash的手册页:

-c字符串
如果有-c选项,那么命令将从string中读取。如果字符串后面有参数,则将它们分配给位置参数,从$ 0开始。

和...

-s
如果-s选项存在,或者如果没有参数剩余选项处理之后,那么命令将从标准输入读取。该选项允许在调用交互式shell时设置位置参数。

因此,我想尝试以下操作:

#!/bin/bash 
command1 
command2 
someapp -c "command3 ; command4" 

OR

#!/bin/bash 
command1 
command2 
someapp -s <<-EOF 
    command3 
    command4 
    EOF 
相关问题