私はちょうど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>";