무의식적으로 터미널에서 무한 루프를 실행했습니다.


9

아래 코드를 임의의 소스에서 터미널로 복사하여 실행했습니다.

while sleep 1;
  do tput sc;
  tput cup 0 $(($(tput cols)-29));
  date;
  tput rc;
done &

코드는 터미널의 오른쪽 상단에 실행중인 시계를 표시하는 것입니다. 스 니펫은 매우 잘 작동했으며 원하는 것을 정확하게 수행했지만 이제는이 루프를 끝내고 시계를 제거하고 싶습니다.

또한 위의 코드를 이해해야합니다. tput명령이 무엇을하는지 알면서도 몇 가지 아이디어 가 있지만 여전히 연결할 수없는 점이 많이 있습니다.


1
jobs세션에서 실행 하여 활성 백그라운드 작업을 나열한 다음을 입력하여 포 그라운드로 놓을 수 fg <job number>있습니다. 이 무한 루프를 중지하려면 Ctrl + C를 입력하십시오. 이 시나리오는 스 니펫을 실행하는 터미널에서만 작동합니다.
Yurij Goncharuk

루프를 제거하는 매우 깨끗한 방법입니다. 이것이 정답이되어야합니다.
Kartik Chauhan

아니에요! 나는 그것을 다음과 같이 대답했다.
Yurij Goncharuk

1
터미널 창을 닫으면 연결된 모든 실행 작업도 종료됩니다.
trlkly

여기에 두 가지 질문이 있습니다. 두 번째 질문을 새로운 질문으로 나눌 수 있습니까?
ctrl-alt-delor

답변:


15

jobs세션에서 명령을 실행 하여 활성 백그라운드 작업을 나열한 다음을 입력하여 포 그라운드로 놓을 수 있습니다 fg <job number>. 그런 다음 Ctrl+ C를 입력 하여이 무한 루프를 중지하십시오.

이 시나리오는 스 니펫을 실행하는 터미널에서만 작동합니다.


설명:

tput sc -커서 위치를 저장하십시오.

tput cup 0 $(($(tput cols)-29))-커서를 0Y 축 및 (count of screen columns minus 29)X 축의 위치로 이동합니다 .

date -현재 날짜 만 인쇄하십시오.

tput rc -커서 위치를 복원합니다.

while sleep 1; ... do ... ; done -1 초 지연된 루프.

쉘의 루프에 help while대해 더 많이 알고 타이핑 이 작동하는 방법을 알려 man 1 tput 또는 tldp tput docwhile따르십시오 .


나는 여전히 코드가 어떻게했는지 알고 싶다.
Kartik Chauhan

@KartikChauhan 나는 또한 약간의 설명을 넣었다.
Yurij Goncharuk

@KartikChauhan 당신이 맞아요! 감사! 방금이 문제를 해결했습니다.
Yurij Goncharuk

3
kill %1(또는 여러 직업이있는 경우 다른 숫자) fg+ + 의 대안입니다Ctrl-C
Roman Odaisky
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.