쉘 스크립트에서 대화형 명령의 출력을 인쇄합니다.

쉘 스크립트에서 대화형 명령의 출력을 인쇄합니다.

echo시스템 상태를 모니터링하기 위해 CGI 스크립트를 작성 중이므로 해당 정보를 터미널에 사용하거나 출력해야 합니다 cat. 문제는 systat이것이 대화형 명령이기 때문에 화면에 아무 것도 인쇄하지 않는다는 것입니다.

시도해 보았 systat | echo으나 systat | cat전자는 결과가 나오지 않는 반면 후자는 systat.

편집하다

좋아요, 명확히 해보겠습니다. 기본적으로 와 같은 쉘 스크립트를 요청합니다 monitor.sh. exec 를 사용하여 실행하면 ./monitor.sh새 프로세스가 시작되고 결과가 출력된 systat다음 종료됩니다.

다음과 같아야 합니다.

root@HPC:~/playground # ./monitor.sh
                    /0   /1   /2   /3   /4   /5   /6   /7   /8   /9   /10
     Load Average   >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 12.0

                    /0%  /10  /20  /30  /40  /50  /60  /70  /80  /90  /100
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root           calc XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
root@HPC:~/playground # 

답변1

이것systatFreeBSD의 매뉴얼 페이지설명하다,

  • "전역" 명령 해석기는 모든 키보드 입력을 처리합니다.
  • 이것quit명령은 "전역" 명령 해석기에 의해 해석됩니다. systat우리에게 그만두라고 말합니다 .
    • 이것quit명령은 다음과 같이 축약될 수 있습니다. q.
  • 명령줄에 "show 명령"을 제공할 수 있습니다.-. (인지 여부는 명시적으로 언급되지 않았습니다.quit"표시 명령"에 적합합니다. )

그래서 실망스럽게도 이것은 systat -q작동하지 않습니다. 기타 시도해 볼 사항:

  • systat -quit
  • (sleep 5; echo quit) | systat
    • (이것을 로 입력해야 할 수도 있습니다 sh -c '(sleep 5; echo quit) | systat'.)
    • (sleep 5; echo :quit) | systat 아니면 또는 을 수행해야 할 수도 있습니다 sh -c '(sleep 5; echo :quit) | systat'. (추가 참고사항:.)
  • systat& sleep 5; kill "$!"
    • (이것을 로 입력해야 할 수도 있습니다 sh -c 'systat& sleep 5; kill "$!"'.)

원하는 결과를 얻으려면 수면 일정을 조정해야 할 수도 있습니다.

관련 정보