2

我希望这是一个大师的快速问题。我有以下命令,它在命令行中效果很好:

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

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

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

第二个 < 然后允许将 std in 返回给应用程序。

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

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

该脚本不会将 createmvp 传递到 shell 中。如果我删除传递 createmvp 的 < /dev/tty 位,但随后重新捕获终端显然不会。我似乎没有做任何事情。

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

关于如何使这项工作像从命令行一样工作的任何想法?

提前致谢

艾伦

4

3 回答 3

2

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

我认为原因<<< createmvp < /dev/tty不起作用是因为两者<<<都是<指定标准来源的方法,而您不能两者都做。<<<接受一个字符串作为参数并将其传递给标准输入,而<接受一个文件。

于 2012-11-17T02:17:40.400 回答
1

我认为你应该使用 eval:

#!/bin/bash
cmd="src/protected/yiic shell src/index.php <<< createmvp < /dev/tty"
eval $cmd
于 2012-10-16T16:12:11.167 回答
1

yiic要在处理exit命令本身后立即退出脚本,trap可以yiic对子 shell 使用 on exit:

# small addition to cpugeniusmv's answer
(echo createmvp; cat /dev/tty) | 
    (trap 'kill 0' EXIT; src/protected/yiic shell src/index.php)
于 2013-04-26T16:26:39.190 回答