이 작업을 일시 중단하고 Ctrl-Z bg시퀀스가 너무 자주 계속되도록하는이 패턴을 따릅니다 .
단일 키 누르기로 압축 할 수있는 방법이 있는지 궁금합니다.
내 껍질은 zsh
이 작업을 일시 중단하고 Ctrl-Z bg시퀀스가 너무 자주 계속되도록하는이 패턴을 따릅니다 .
단일 키 누르기로 압축 할 수있는 방법이 있는지 궁금합니다.
내 껍질은 zsh
답변:
Ctrl+의 Z순서는 없다 쉘, 단말기에 의해 처리된다. (유용한 배경 : '터미널', '쉘', 'tty'및 '콘솔'의 정확한 차이점은 무엇입니까? )
확장 할 수 없는 작은 기능 집합 만 터미널의 키에 바인딩 할 수 있습니다 . 이러한 기능에 바인딩 된 키 를 사용자 정의 할 수 있지만 다른 기능을 추가 할 수는 없습니다. 이러한 기능은 세 가지 범주로 분류됩니다.
eof
, Ctrl+ D), 줄 끝 ( eol
, Ctrl+ M), 왼쪽 문자 삭제 ( erase
, Ctrl+ H), 왼쪽 단어 삭제 ( werase
, Ctrl+ W), 줄 삭제 ( kill
, Ctrl+ U).stop
( Ctrl+ S), start
( Ctrl+ Q). 터미널이 컴퓨터를 따라 잡을 수 없거나 그 반대의 경우 문자를 떨어 뜨린 오래된 직렬 터미널에서만 유용합니다.intr
, Ctrl+ C), 강제 종료 ( quit
, Ctrl+ \), 일시 중단 ( Ctrl+ Z).Linux를 포함한 일부 시스템은이 목록을 확장하지만 배경을 포함하는 시스템은 본 적이 없습니다. 커널의 터미널 드라이버와 터미널 에뮬레이터에서 모두 지원됩니다. 따라서 일시 중단 작업을 수행해야 전경 작업을 SIGTSTP 신호로 보냅니다 . 포 그라운드 작업 리더의 상위 프로세스 (일반적으로 쉘)에서 SIGCHLD 를 트리거합니다 . 쉘이 SIGCHLD를 받았을 때, 쉘은 waitpid
왜 알림을 받았 는지 알아 내고 백그라운드 작업이 일시 중단되었음을 감지하면 알림 (예 :) [1] + 12345 suspended mycommand
과 새로운 프롬프트를 표시합니다.
SIGCONT
포 그라운드 작업에 신호를 보내도록 쉘을 프로그래밍 할 수 있습니다 . zsh에 후크가 있다고 생각하지 않으므로 소스 코드를 패치해야합니다. 그리고 zsh가 실제로 프로그램을 중단시킬 것인지 (이 프로그램이 잘못된 일을 할 수 있습니다, 정렬하는 동안 일시 중단하도록) 또는 배경을 알 수있는 방법이 없습니다.
내가하는 일은 zsh에서 Ctrl+ Z키 시퀀스 를 설정 하여 현재 작업을 백그라운드 로 설정하는 것입니다 ( %%
). 이렇게하면 Ctrl+ Z Ctrl+ 를 눌러 전경 작업을 배경으로 보낼 수 있습니다 Z. 내가있는 동안 현재 입력 줄이 비어 있지 않을 때 Ctrl+ Z다른 유용한 것을 수행합니다 (따라서 하위 프로세스에서 돌아 오지 않았습니다) : 현재 입력 줄을“일시 중단”하여 다른 명령을 입력 할 수 있습니다 그 후 중단 된 라인이 입력 버퍼로 다시 푸시됩니다.
fancy-ctrl-z () {
if [[ $#BUFFER -eq 0 ]]; then
bg
zle redisplay
else
zle push-input
fi
}
zle -N fancy-ctrl-z
bindkey '^Z' fancy-ctrl-z
그래서 내가 원하는 것이 아니라 여기에서 해결책을 찾았습니다 /superuser//a/161922/35223
빈 명령 줄에서 bg를 실행합니다 (Ctrl + Z Ctrl + Z는 프로그램을 일시 중단하고 즉시 백그라운드에서 다시 시작합니다).
Ctrl+Z
call bg
, 비어 있지 않은 입력 행을 감지하는 것이 확실하지 않습니다).
이 명령을 처음에 포 그라운드에서 실행 한 다음 배경으로 전환 하시겠습니까? 더 간단한 방법이 있는지 모르겠습니다. 그러나 백그라운드에서 시작할 명령을 실행하려면 라인 끝에 앰퍼샌드를 추가하면됩니다. 예를 들어 ping google.com &
백그라운드에서 핑을 시작합니다. 를 입력하지 않으면 상호 작용할 수 없습니다 fg
.