선명한 화면 및 디스플레이 배너

선명한 화면 및 디스플레이 배너

항상 투사되는 화면에 텍스트 배너를 배치해야 합니다. 화면은 tmux를 사용하여 PC에 연결됩니다.

텍스트 "배너" 예:

figlet $(fortune)

또는

toilet "$(cowsay $(fortune))"

당신은 이해했습니다.

처음에 우리는 문제가 발생할 경우를 대비해 이 배너에 "재생 기능"이 필요하다고 생각하여 다음과 같이 했습니다.

watch --interval 1 --no-title echo Paranoid about crashes, but I should not be

하지만 이 제품은 1년 동안 단 한 번도 고장난 적이 없습니다! ( uptime>1년)

그래서 우리는 다른 곳에서도 단순화하고 배포하고 있습니다. 나는 다음을 수행하는 UNIX 명령을 원합니다.

  • 화면 지우기(예 clear: )
  • 형식화된 문자열 표시(예 printf: )
  • 모달입니다( ncurses응용 프로그램과 유사).

나는 온라인 튜토리얼에서 발췌하여 다음과 같은 글을 쓰기 시작했습니다.

#include <ncurses.h>

int main(int argc, char** argv) {
  char* greeting = "Hello, world!";
  initscr();
  addstr(greeting);
  refresh();
  getch();
  endwin();
  return 0;
}

그러나 이것은 "모달"이 아니며(모달은 CTRL+C까지 모든 입력을 무시함) 아마도 "기존 도구를 다시 작성"하는 중일 것입니다.

내 경우에는 어떤 UNIX 도구를 사용하시겠습니까?

답변1

Ctrl+C(INT 신호)를 모니터링하는 명령은 다음과 같습니다.trap.

#!bin/bash

MSG="Hello, world!"
trap "clear; echo -e $MSG" SIGINT SIGTERM

while :
do
    sleep 60
done

업데이트 - 트랩으로 잡을 수 있는 기타 신호

SIGINT - Ctrl-c
SIGQUIT- Ctrl-\(이렇게 하면 프로그램이 종료되지만 트랩에 있는 명령은 계속 실행됩니다)

SIGSTOP(Ctrl-z)는 함정에 걸린 것 같지 않습니다.

trap방출된 신호를 캡처하는 것도 가능 kill하지만 얼마나 많은지 잘 모르겠습니다.

trap
EXIT- , DEBUGRETURN와 같은 다른 특수 이름도 지원됩니다 ERR.
이에 대한 더 많은 문서는 다음에서 찾을 수 있습니다.배쉬 참조 매뉴얼.

답변2

내가 이해한다면 무한 루프를 원할 것입니다.

while :; do
  sleep 1
  clear
  # the command: echo, toilet, etc.
done

아마도 watch의 문제점은 watch를 호출하기 전에 쉘 확장이 완료되어 $(command ..)출력이 큰따옴표를 작은따옴표로 변경하지 않는다는 것입니다.

watch --interval 1 'cowsay $(fortune)'

관련 정보