Webサイトでbashスクリプトを実行中に問題が発生する

Webサイトでbashスクリプトを実行中に問題が発生する

私はちょうどbashでスクリプトを作成し始めました、そしてそれらのいくつかを私のWebサーバー(私の仮想Debian 6.0.4コンピュータにあります)に入れました。

このコンピュータにlighttpdをインストールしました。たとえば、次のコマンドを実行した場合:

TOP=`top -n 1`;
PS=`ps aux`;

echo "that's top\n" $TOP;
echo "ps\n" $PS;

テキストは行区切りなしで書かれている$TOPので、何も印刷されません(すべて1行に書かれています)。$PSこれをどのように変更できますか?

答え1

プレーンの出力は、top端末以外のデバイスに表示するのには適していません。-bプレーンテキスト出力を取得するには、このスイッチを使用する必要があります。

そして、行末文字は実行中のシェルによって削除されます(スペースで置き換えられます)。この出力を変数に保存する理由はなく、必要に応じてこれらのコマンドを実行できます。

データをWebブラウザに返すとします。この場合、出力を正しく表示するには最小限のHTML形式を実行する必要があります。

次のようにしてみてください。

#! /bin/sh
echo -e "Content-type: text/html\n"
echo "<html><body>"
echo "<h1>top</h1>"
echo "<pre>"
top -b -n 1
echo "</pre>"
echo "<h1>ps</h1>"
echo "<pre>"
ps aux
echo "</pre>"
echo "</body></html>"

答え2

出力が表示されない理由はフォローしていないからです。CGIプロトコル。他の出力の前にサーバー応答ヘッダーを送信する必要があります。

TOP=`top -n 1`;
PS=`ps aux`;

echo "Content-Type: text/plain"  # response header
echo ""                          # end of headers
echo "that's top\n" $TOP;
echo "ps\n" $PS;

text / plainを使用すると、目的の形式が提供されますが、ハイパーリンクなどのHTMLの使用は提供されません。これを行うには、次を使用します。

TOP=`top -n 1`
PS=`ps aux`

echo "Content-Type: text/html"
echo ""
echo "<html>"
echo "<head><title>command output</title></head>"
echo "<body>that's top<br/>"
echo "<pre>$TOP</pre>"
echo "<br/>ps<br/>"
echo "<pre>$PS</pre>"
echo "</body>"

答え3

これが端末で実行されている場合、変数をエコーするときに改行文字を保持するには、変数の周りに引用符が必要です。

TOP=`top -b -n 1`;
PS=`ps aux`;

echo "that's top";
echo "$TOP";
echo "ps";
echo "$PS";

出力がWebページに送信される場合は、preタグも必要です。

TOP=`top -b -n 1`;
PS=`ps aux`;
echo "<pre>";
echo "that's top";
echo "$TOP";
echo "ps";
echo "$PS";
echo "</pre>";

関連情報