현재 상황:애플리케이션/스크립트가 터미널에서 백그라운드 프로세스로 시작되어 콘솔에 출력을 제공하는 경우(즉, STDOUT이므로 출력 리디렉션이 없음) 터미널에 무언가를 입력하면 실행 중인 프로세스가 터미널에 무언가를 출력합니다. 또한 동시에 순간, 프로세스의 출력은 내가 입력하는 내용에 "추가"되므로 입력과 출력이 시각적으로 왜곡됩니다.
원하는 결과:백그라운드 프로세스가 터미널에 출력을 표시할 때마다 "지금까지 입력한" 입력을 다음 줄로 건너뛸 수 있는지 알고 싶습니다. 즉, 입력 텍스트는 항상 진행 중인 프로세스와 별도로 마지막 줄에 자동으로 표시됩니다. 산출).
기본적으로 나는 "와 같은 것을 달성하는 방법을 찾고 있습니다.기록 동기화" 명령은 Cisco 장치의 IOS에서 허용됩니다(더 나은 예여기)을 활성화하면 입력하는 동안 "시스템 관련" 출력이 표시될 때마다 지금까지 입력한 모든 내용이 새 줄(항상 마지막 줄)에 배치됩니다.
추가 사항: 시각적으로 입력 텍스트와 출력 텍스트가 함께 혼합되어 있어도 명령을 계속 입력하고 Enter 키를 누르면 제대로 작동할 것이라는 것을 알고 있습니다. 파악하기가 어렵습니다.정확히출력 결과가 당황스러울 때 무엇을 넣었나요?
저는 Gnome과 함께 Debian Jessie를 사용하고 있으므로 기본 Gnome 터미널과 함께 Bash를 사용하지만 가상 콘솔을 사용할 때(예: CTRL+ALT+F1 이후) 동일한 동작이 발생합니다.
이 작업을 수행하는 매우 간단하고 잘 알려져 있으며 확실한 방법이 있는지 잘 모르겠지만 한 시간 중 더 나은 부분을 검색했지만 소용이 없었으므로 이것이 더 생각할 필요가 없다면 죄송합니다. 알다.
아니면 이 기능(존재하는 경우)은 사용되는 터미널 애플리케이션에 따라 달라지나요?
의견을 보내주셔서 감사합니다.
답변1
한 가지 옵션은 백그라운드에서 작업하는 동안 STDOUT 및 STDERR을 파일로 리디렉션하는 것입니다.
ls &> job.txt &
[1] 13160
[1]+ Done ls &>job.txt
그런 다음 실행 중인 작업을 확인하세요.
jobs
[1]+ Running yes &>/dev/null &
또한 이를 포그라운드에 배치하고 인터럽트하거나 보기하여 job.txt
상태를 확인할 수도 있습니다(출력을 버퍼링하지 않는다고 가정).
fg 1
작업이 완료되면 다음 명령이 완료된 후 터미널에서 알림을 받아야 합니다(bash에서는 명령 입력이 중단되지 않습니다).
내 생각엔 네가 이 일을 하지 않는 이유가 있는 것 같아. 백그라운드에서 사용할 수 있고 CrtlI z/O를 리디렉션할 수 있는지 잘 모르겠습니다.
답변2
내가 아는 한, 자동으로 "마법의" 방법은 없습니다.
터미널이 쿠킹 모드에 있는 경우(전체 화면도 아니고 readline 지원 또는 이와 유사한 간단한 애플리케이션을 실행하는 경우와 같이 cat
) 터미널 규칙의 "reprint" 문자를 누를 수 있습니다. 제 경우에는 Ctrl+ R였습니다 . rprnt
매뉴얼 stty
페이지와 stty -a
. 그러면 다음 줄로 이동하여 입력 중인 텍스트가 다시 인쇄됩니다.
전체 화면을 실행하거나 줄 인식 응용 프로그램을 읽는 경우 화면이나 현재 줄을 다시 그리는 고유한 방법(보통 Ctrl+ R또는 Ctrl+ )이 있을 수 있습니다.L