웹사이트에서 bash 스크립트를 실행하는 중에 문제 발생

웹사이트에서 bash 스크립트를 실행하는 중에 문제 발생

나는 방금 bash에서 스크립트를 작성하기 시작했고 그 중 일부를 내 웹 서버(내 가상 Debian 6.0.4 컴퓨터에 있음)에 넣었습니다.

이 컴퓨터에 lighttpd를 설치했습니다. 예를 들어 다음 명령을 실행할 때:

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

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

텍스트를 줄 구분 없이 작성하기 $TOP때문에 아무것도 인쇄되지 않습니다 (모두 한 줄에 작성됨). $PS이것을 어떻게 바꿀 수 있나요?

답변1

plain의 출력은 top터미널 이외의 다른 장치에 표시하는 데 적합하지 않습니다. -b일반 텍스트 출력을 얻으려면 이 스위치를 사용해야 합니다 .

그리고 줄 끝 문자는 실행 중인 셸에 의해 제거됩니다(공백으로 대체). 이 출력을 변수에 저장할 이유가 없으며 필요할 때 이러한 명령을 실행할 수 있습니다.

데이터를 웹 브라우저로 반환한다고 가정합니다. 이 경우 출력을 올바르게 표시하려면 최소한의 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";

출력이 웹페이지로 전송되는 경우 pre 태그도 필요합니다.

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

관련 정보