1

Web ページの div に bash スクリプトの出力を表示しようとしています。しかし、ページをロードしても何も表示されません。これが私がこれまでに持っているものです。

Jquery ajax 関数。Discon は、情報が表示されるはずの div の名前です。

$(document).ready(function() {
    $.ajax({
            type: "POST",
            url:  "discon.php",
            data: "Discontinuities",
            success: function(data) {
            $('#discon').html(data)
            }
    });
 });

これは、jquery にあるものを取得するための私の php です。コメントアウトされた部分は、php でさまざまなオプションを試していた場所であることに注意してください。いくつか試してみましたが、何もうまくいかないようです。

<?php

 echo passthru('/opt/bin/enc_current_test');

//$discon = exec('/opt/bin/enc_current_test', $o, $r);
//if ($r != 0){
//      print 'Error running command';
//      exit($r);
//}
//else{
//      print implode("\n", $o);
//}

?>

別の Div の同じページに表示される別の bash スクリプトがあり、正常に動作するので、なぜこれが問題を引き起こしているのかという質問があります。これがbashスクリプトです。

#!/bin/bash

while [ true ]
do
    counter=0

    clear
    date

    dir=/test/`date "+%Y/%m/%d"`

    cd $dir
    echo Writing On: `pwd`

            for i in `ls`
            do
                    if [ -n "$(ls -l $i/* | grep `date "+ %k:%M"`)" ];
                    then
                            echo $i
                            let "counter+=1"
                    fi
            done
    echo
    echo "Total Current Streams: "
    echo $counter
    sleep 60
    clear
done

スクリプトが 60 秒間スリープするためだと考えていますが、同じ間隔でページを更新するために HTML にタグを追加しましたが、それでも機能しません。このスクリプトが表示されない理由について何か考えはありますか? この時点でちょっと途方に暮れています。返信ありがとうございます。

4

2 に答える 2

1

あなたのbashスクリプトは無限ループを実行します

while [ true ]
do
...
done

Web サーバーはスクリプトからの応答を待機し続け、それをクライアント (ブラウザー) に送信しません。

bashスクリプトでwhileループとスリープコマンドをコメントしてみてください

また、clear コマンドで余分な文字が書き込まれるのを見たくないので、それらもコメントしてください。

#!/bin/bash

#while [ true ]
#do
    counter=0

#    clear
    date

    dir=/test/`date "+%Y/%m/%d"`

    cd $dir
    echo Writing On: `pwd`

            for i in `ls`
            do
                    if [ -n "$(ls -l $i/* | grep `date "+ %k:%M"`)" ];
                    then
                            echo $i
                            let "counter+=1"
                    fi
            done
    echo
    echo "Total Current Streams: "
    echo $counter
#    sleep 60
#    clear
#done
于 2012-11-14T11:29:34.953 に答える
1

echoの前の を削除しpassthru()ます。

passthru()何も返さず (void)、直接出力します。したがって、現在のステートメントはエコーしvoidます。

于 2012-11-14T10:52:25.843 に答える