현재 명령 중간에서 서브쉘 실행

현재 명령 중간에서 서브쉘 실행

나는 종종 이런 상황에 처해 있습니다. 명령을 입력하고 있는데 명령을 완료하기 전에 다른 사항을 확인해야 합니다.

일종의 하위 쉘을 열고 지금까지의 현재 입력을 기억한 다음 이 하위 쉘을 종료하면 원래 있던 곳으로 돌아갈 수 있는 방법이 있습니까?

$ mylongcommand -n -e <SOME KEY COMBINATION WHICH OPENS A SUBSHELL>
$ date
...
$ exit
$ mylongcommand -n -e <BACK TO WHERE I WAS>

나는 그것을 사용하고 있다zsh

답변1

저는 보통 Ctrl+를 사용하여 U현재 줄을 지우고 버퍼에 저장합니다. 거기서부터 나는 이전에 해야 했던 일을 하기 시작했습니다 mylongcommand. 그런 다음 준비가 되면 Ctrl+를 사용하여 프롬프트에 다시 Y붙여넣습니다 .mylongcommand

무언가를 확인할 때 반만 입력된 명령을 기억하세요

답변2

EscQ명령 버퍼를 저장하고 새 명령을 입력할 수 있는 키 조합이 있습니다 . 명령을 실행한 후 버퍼에는 이전에 입력한 내용이 포함됩니다. 이 작업을 완료하기 전에 다른 명령을 실행해야 하는 경우 EscQ해당 명령을 다시 입력할 수 있습니다.

(저는 서브쉘을 누른 후 열려고 시도하지 않았습니다 EscQ.)

바라보다http://zsh.sourceforge.net/Intro/intro_10.html"esc-q"를 검색하세요.

답변3

Ctrl내 솔루션은 확실히 기술 수준이 낮고 투박하지만 + A, , 을 차례로 #탭 하는 것과 같이 이미 익숙할 수도 있는 키 시퀀스에 의존합니다 ENTER.

#이는 줄 시작 부분에 a를 삽입하여 주석으로 만든 다음 실행하여 명령 기록에 푸시하는 효과가 있습니다. 그런 다음 보조 명령을 입력하고 명령 기록을 주석 처리된 명령으로 스크롤하고 #필요에 따라 명령을 삭제하고 완료할 수 있습니다.

답변4

Ctrl+를 입력하여 Z입력 중인 명령을 "일시 중지"하고 다른 명령을 입력합니다. 명령을 실행한 후(또는 Ctrl+ 로 중단 C) 보류 중인 명령이 편집을 위해 반환됩니다(커서 위치도 기억됩니다). 편의상 Ctrl+를 입력할 때 명령줄이 비어 있으면 Z해당 키가 bg내장 명령을 호출합니다. 따라서 Ctrl+를 두 번 누르면 Z실행 중인 명령이 백그라운드로 직접 전송됩니다.

fancy-ctrl-z () {
  emulate -LR zsh
  if [[ $#BUFFER -eq 0 ]]; then
    bg
    zle redisplay
  else
    zle push-input
  fi
}
zle -N fancy-ctrl-z
bindkey '^Z'          fancy-ctrl-z

(이전에 포스팅한무언가를 확인할 때 반만 입력된 명령을 기억하세요주로 그렇게 편리하게 아무것도 할 수 없는 bash 솔루션이 있습니다. 이건 좀 더 발전된 버전이에요M-q에 대한 내장 바인딩push-line.)

이는 하위 쉘을 실행하지 않습니다. 이전 명령을 "일시 중지"한 후에 입력하는 명령은 동일한 쉘에서 실행됩니다. 명령을 입력한 후 다른 디렉터리에서 실행하려고 했다는 것을 알게 되면 현재 디렉터리를 변경하는 등의 작업을 수행할 수 있습니다. 새로운 셸 인스턴스를 실행하려면 zsh키 바인딩을 통해 실행할 수 있지만 이것이 특별히 유용하다고 생각하지는 않습니다.

관련 정보