항상 투사되는 화면에 텍스트 배너를 배치해야 합니다. 화면은 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
- , DEBUG
및 RETURN
와 같은 다른 특수 이름도 지원됩니다 ERR
.
이에 대한 더 많은 문서는 다음에서 찾을 수 있습니다.배쉬 참조 매뉴얼.
답변2
내가 이해한다면 무한 루프를 원할 것입니다.
while :; do
sleep 1
clear
# the command: echo, toilet, etc.
done
아마도 watch의 문제점은 watch를 호출하기 전에 쉘 확장이 완료되어 $(command ..)
출력이 큰따옴표를 작은따옴표로 변경하지 않는다는 것입니다.
watch --interval 1 'cowsay $(fortune)'