포그라운드/백그라운드 작업에 대한 셸 키 바인딩 교체

포그라운드/백그라운드 작업에 대한 셸 키 바인딩 교체

사용량이 많고 tmux창 간 전환에도 불구하고 여전히 셸 작업 제어를 꽤 많이 사용합니다. 찔러야 할 게 있으면 백그라운드 Ctrl+ 사용하고 있는 도구를 Z찔러서 fg다시 도구를 사용합니다. 문제는 때때로 "파킹"이 다른 도구를 사용하는 것으로 바뀌고 몇 번 앞뒤로 이동하고 싶다는 것입니다.

가장 최근의 백그라운드 작업에 관계없이 현재 작업을 백그라운드에 두고 이를 실행하는 셸에서 캡처한(즉, 포그라운드 애플리케이션에 전달되지 않은) 다른 키를 바인딩할 수 있나요?

답변1

이로 인해 1개 이상의 작업이 일시 중지될 때마다 Publish CTRL+가 이전 작업을 즉시 재개합니다 . Zwhile 루프를 종료하는 유일한 방법은 최대 1개의 백그라운드 프로그램이 남을 때까지 프로그램을 닫는 것입니다.

function fgstack() {
  local n_jobs=$(jobs | tr -cd "[:digit:][:space:]" | wc -l)
  while [[ n_jobs -gt 1 ]]; do
    fg %-;
    n_jobs=$(jobs | tr -cd "[:digit:][:space:]" | wc -l)
  done
}

두 개의 작업 루프에서 벗어날 수 있는 기회 를 주고 싶다면 0.2초가 경과할 때까지 작업을 일시 중지해도 괜찮습니까? CTRL++ : (zsh - bash의 경우 시간을 얻으려면 다른 것을 사용해야 합니다):ZZ

function fgstack() {
  local n_jobs=$(jobs | tr -cd "[:digit:][:space:]" | wc -l)
  while [[ n_jobs -gt 1 ]]; do
    if [[ $SECONDS -lt 0.2 ]]; then
      break
    fi
    typeset -F SECONDS=0
    fg %-;
    n_jobs=$(jobs | tr -cd "[:digit:][:space:]" | wc -l)
  done
}

이것은 또 다른 필요한 것입니다후지브하지만 선택할 수 있는 옵션이 3개 이상인 경우 메뉴가 표시됩니다.

function fgstack() {
  local n_jobs=$(jobs | tr -cd "[:digit:][:space:]" | wc -l)
  while [[ n_jobs -gt 1 ]]; do
    if [[ n_jobs -eq 2 ]]; then
      fg %-;
    else
     job=$(jobs | fzf -0 -1 | tr -cd "[:digit:]") && fg %$job
    fi
    n_jobs=$(jobs | tr -cd "[:digit:][:space:]" | wc -l)
  done

zsh 및 bash에서 테스트됨 - bash는 함수 호출 후 첫 번째 백그라운드 작업에서 돌아온 후 while 루프를 종료하는 것 같습니다. 이 문제를 해결하는 방법을 아는 사람이 있으면 편집 및 의견을 환영합니다!

관련 정보