이전 명령까지“스크롤”한 후 BASH를 사용하면…이 기록에서 다음 명령으로 넘어가는 방법은 무엇입니까?


59

사과,이 제목은 내가 고안 한 것 중 가장 우아하지 않습니다.

그러나 나는 많은 사람들이 이것을 궁금해했을 것이라고 생각하며 내 질문은 속임수 일 수 있습니다 ... 내가 말할 수있는 것은 내가 그것을 찾지 못했다는 것입니다.

"스크롤"이라고 말하면 키보드의 "위쪽 화살표"키를 사용한다는 의미입니다. 가장 최근 명령부터 시작하여 기록을 스크롤합니다.

그래서 당신은 아마도 30 개의 명령을 찾은 명령을 발견하고 그것을 실행할 수 있습니다. 그런 다음 원래 명령을 실행하려고합니다 ...이 작업을 수행하는 방법이 있습니까? 아니면 BASH에 유창한 사람들이 어떻게합니까?

답변:


96

명령 대신 Ctrl+를 o사용 하여 명령을 실행하면 Enter기록에서 명령이 실행 된 다음 bash 기록의 맨 앞으로 돌아 가지 않고 다음 명령이 대기열에 추가됩니다.


2
NetBSD의 xterm에서 실행중인 내 배쉬에서 이것을 시도했지만 작동하지 않습니다! 이에 영향을 줄 수있는 설정이 있습니까? .inputrc 파일이 없습니다. readline (3) 매뉴얼 페이지에는 Co가 언급되어 있지 않습니다.
Rhialto

@Rhialto vi줄 편집 (으로 활성화 set -o vi)을 사용하고 emacs있습니까? Ctrl-O내가 말할 수있는 한 전자와 함께 작동하지 않기 때문 입니다.
B 레이어

...하지만 다음 명령으로 해결할 수 있습니다 : bind "\C-o":operate-and-get-next(또는 이후 bind에 모든 것을 추가하십시오 ~/.inputrc)
B Layer

1
내 문제가 무엇인지 알았습니다 : ^ O는 Flush Output 문자 (Linux에서는 지원되지 않음)로 간주되며 readline은 활성화되어있는 동안 이것을 비활성화하지 않습니다. 간단한 패치를 제공했지만 bash 및 readline 관리자는 이것이 버그가 아님을 유지합니다. 동의하지 않습니다. 참조 lists.gnu.org/archive/html/bug-readline/2018-01/msg00004.html
Rhialto

19

Jon Reinhold의 답변은 훌륭하지만 내가 제안 할 훨씬 더 강력한 솔루션이 있습니다. Jon의 답변에 문제에 대한 의견이 있지만 직접 의견을 말할 수있는 평판이 충분하지 않으므로 @Jon Reinhold를 읽으면 아래에서 의견을 보내주십시오.

Bash에는 fcbash 기록 목록의 매개 변수 행 번호를 사용 하는 명령이 포함되어 있습니다 . 그런 다음 해당 줄을 텍스트로 사용하여 기본 편집기를 엽니 다. 이때 선을 선택적으로 편집 할 수 있습니다. 그런 다음 편집기를 종료하면 bash가 해당 행을 실행합니다!

편집하려는 예는 "; read -p"next ... "와 같은 마지막 행을 제외한 모든 행에 추가하는 것입니다. 이렇게하면 bash가 각 행을 실행하고 계속하기 전에 프롬프트가 표시됩니다.

Jon Reinhold에 대한 의견 : 좋은 대답이지만 사용자가 bash 변수 HISTCONTROL을 include로 설정하면 erasedups실행 기록 후 C-o예상되는 다음 명령 대신 표시되는 명령 때문에 사용자가 혼란 스러울 수 있으므로 자격을 부여해야 합니다. 가 표시됩니다. 이것은 bash가 실행 된 명령의 원래 인스턴스를 삭제했기 때문에 모든 명령이 한 줄 위로 이동했기 때문입니다. 히스토리 목록에서 하나의 낮은 색인 번호로.


검색하여 답을 찾으려고 노력하면서 "fc"명령을 발견했습니다. 나에게 이것은 지식을 향한 영광의 길을 따라 BASH neophyte의 느린 아기 발자국의 다음 단계를 나타냅니다. 나는 아기 발걸음을 원했습니다 .
마이크 설치류

3
@mikerodent 아니요. 따라서 그 자체 와 fc이전에 모두 발생 합니다. (이 답변과 반대로 유용 Ctl-obash
하지도 않습니다

1
문제 erasedups는 분명히 bash 버그입니다 ( 이 상황에 대비했을 있습니다). 그래도 알아서 좋습니다.
Alexis

2
@kubanczyk 토론이 끝났습니다. 수정해야 할 사항에 따라 복잡하고 복잡한 명령이라면 선택한 편집기를 사용하여 명령을 업데이트하는 것이 훨씬 빠릅니다. 또한 더 쉬울 것입니다.
Pryftan

14

(이 중 원하는 동작을 수행하는 또 다른 방법은 배쉬의 readline 단축키에 익숙해하는 것 CTRL- o내가 생각 하나)과 bash는 역사 검색.

역사 검색

CTRL- r당신은 당신이 찾고있는 명령을 입력하기 시작 할 수 있으며 bash는 당신을위한 명령을 자동으로 완성 곳, bash는 명령 기록 검색으로 이동합니다. 자동 완성 기능은 정말 좋습니다. 실행하려는 명령이 입력 행에 있으면 ENTER명령을 실행 하거나CTRL - e를 눌러 커서를 명령 행의 끝으로 이동하고 히스토리 검색 모드를 종료하십시오.

이 시점에서 CTRL- e로 멋진 점은 이력 버퍼가 컨텍스트 적으로이 명령에 설정되어 있다는 것입니다. 다음 및 이전 명령은 이제 내역 검색에서 찾은 줄 바로 전후에 실행 된 명령입니다. 위쪽 또는 아래쪽 화살표를 누르고 다음 명령을 잡을 수 있습니다.

히스토리 검색은 매우 강력하고 위쪽 화살표를 사용하여 처음으로 명령으로 돌아가는 것을 피할 수있는 좋은 방법입니다. 빠른 기록 검색을 저장할 수 많은 수동 역사를 통해 검색 시간을 그리고 당신은 진행할 수 있습니다 CTRL- o존 위의 지적처럼.

리드 라인 바로 가기

전반적인 bash-fu를 찾고 있다면 화살표 키에 대한 readline 단축키를 사용하는 것이 좋습니다. 그것들이 더 편리하고 타이핑 속도를 높일 수는 있지만 물론 YMMV를 찾을 수 있습니다. 몇 가지 더 있습니다 :

  1. CTRL- n다음 명령 (아래쪽 화살표와 동일)
  2. CTRL- p이전 명령의 경우 (위쪽 화살표에 해당)
  3. CTRL- b문자를 뒤로 (왼쪽 화살표에 해당)
  4. CTRL- f문자 앞으로 (오른쪽 화살표에 해당)

(과 함께 이들의 readline 바로 가기 CTRL- a라인의 시작과 CTRL- e라인의 끝) IMO 명령 줄에서 당신의 속도와 효율성을 증가시킬 것이다.


2
모르겠어요 수정 자 키를 사용하면 화살표 또는 다른 단일 키 누르기보다 속도가 느립니다. EOL 등 나는 홈 / 엔드 키를 사용하는 경향이 있습니다 (stty -a는 물론 매우 편리한 것들을 보여줍니다).
Pryftan

@Pryftan Fair, 마지막 문장은 의견으로 제시됩니다 ( 'imo'참조). 장거리 이동 중에 키보드의 홈 행에 머무르는 것이 터미널 또는 다른 타이핑 집중 작업에서 작업하기에 좋은 전략이라고 생각합니다. 일부 사람들은 화살표 키가 다른 문자에 더 가까운 키보드를 가지고 있습니다.이 경우에는 readline 단축키가 설득력이없는 편일 것입니다. 이 마지막 요점을보다 명확하게 설명하기 위해 답을 편집하겠습니다.
111 ---

1
@datUser Tbh ​​나는 'imo'를 놓쳤다 (또는 내가 그것을 고려하지 않은 경우-전적으로 가능하다). 사실은 역방향 검색이 유용하다면 유용합니다 (+1이 있음). 물론 fc도 이미 언급했듯이 사용하고 있습니다! (기타.). Unices에서 고양이를 껍질을 벗기는 많은 방법. 키보드도 마찬가지입니다 : Unicomp 키보드가 있습니다 (사랑하고 기억을 되찾아줍니다). 물론 Dvorak을 언급하지 않는 다른 키보드도 있습니다. 결국 옵션이 많을수록 더 나은 선택을 할 수 있고 작업 (또는 놀이)이 쉬워집니다 :)
Pryftan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.