2

これが達人への簡単な質問であることを願っています。コマンドラインからうまく機能する次のコマンドがあります。

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

このコマンドは yiic bash スクリプトを実行し、それに引数 shell と src/index.php を渡します。

最初の <<< は引数 createmvp を端末プロンプトに渡します。これは、yiic シェル src/index.php が単独で実行されたときに表示されます。

2 番目の < では、std in をアプリケーションに返すことができます。

ただし、これをbashスクリプト内で実行すると

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

スクリプトは createmvp をシェルに渡しません。< /dev/tty ビットを削除すると createmvp が機能しますが、端末を再キャプチャすると明らかに機能しません。私がしているように見えるものは何も機能しません。

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

コマンド自体をyiic処理するとすぐにスクリプトを終了するには、サブシェルに on exit を使用できます。exittrapyiic

# 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 に答える
1

evalを使用する必要があると思います:

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