Bash重定向和stdin

时间:2012-10-16 16:00:55

标签: linux bash

我希望这对一个大师来说是一个快速的问题。 我有以下命令,它在命令行中运行良好:

 src/protected/yiic shell src/index.php <<< createmvp < /dev/tty

此命令执行yiic bash脚本并将参数shell和src / index.php传递给它。

第一个&lt;&lt;&lt;&lt;将参数createmvp传递给终端提示符,该提示符在yiic shell src / index.php自己运行时显示。

第二个&lt;然后允许std in返回到应用程序。

但是当我在bash脚本中运行它时

#!/bin/bash
src/protected/yiic shell src/index.php <<< createmvp < /dev/tty

该脚本不会将createmvp传递给shell。 如果我删除&lt; / dev / tty位通过createmvp工作,但后来重新捕获终端显然没有。我似乎没有做任何事情。

while(!isset($input))
{
    $input = trim(fgets(STDIN));
    if(!$input)
        echo "$configVar can not be NULL";
}

关于如何通过命令行进行此操作的任何想法?

提前致谢

艾伦

3 个答案:

答案 0 :(得分:2)

(echo createmvp; cat /dev/tty) | src/protected/yiic shell src/index.php

我认为<<< createmvp < /dev/tty不起作用的原因是因为<<<<都是指定标准来源的方法,你无法做到都。 <<<将一个字符串作为参数并将其传递给stdin,而<获取一个文件。

答案 1 :(得分:1)

我认为你应该使用eval:

#!/bin/bash
cmd="src/protected/yiic shell src/index.php <<< createmvp < /dev/tty"
eval $cmd

答案 2 :(得分:1)

要在yiic处理exit命令本身后立即退出脚本,退出时trap可用于yiic子shell:

# small addition to cpugeniusmv's answer
(echo createmvp; cat /dev/tty) | 
    (trap 'kill 0' EXIT; src/protected/yiic shell src/index.php)