[linux] bash 히스토리를 사용하여 이전 명령을 가져 와서 복사 한 다음 ‘실행’하지만 명령은 주석 처리됨
내 bash
기술 을 향상시키기위한 질문 입니다. 나는 항상 이것을한다 :
$ history | grep some_long_command
...
...
123 some_long_command1.........
124 some_long_command2.........
...
그런 다음 다음을 수행하여 찾은 명령을 실행할 수 있습니다.
!123
그러나 나는 종종 이것을하고 싶다.
some_long_command1foobar
즉, 실행하기 전에 명령을 변경하십시오. 대신 bash를 사용하여이 명령을 실행할 수 있습니까?
#some_long_command1
그래서 그것은 주석을받습니다.
그런 다음 마우스를 사용하여 명령을 강조 표시하고 편집 한 다음 실행할 필요가 없습니다 (키보드를 더 빠르게 사용할 수 있음).
스크립트를 작성할 수 있다고 생각하지만 이미 어딘가에 기능이 내장되어있을 수도 있습니다 ….?
답변
history 명령을 사용하는 대신 ctrl+r
해당 명령 을 사용 하고 입력하는 것이 좋습니다 . 수정하러가는 것처럼 화살표 키를 누르면 자동 완성 인식에서 빠져 나가고 실행하기 전에 수정할 수 있습니다.
업데이트 : 또한 방금 입력 한 문자열이 포함 된 다른 명령을 순환하려면 계속 ctrl+r
답변
실제로 :p
명령에 추가 하여 실제로 실행하지 않고도 인쇄 할 수 있습니다. 예를 들면 :
$ ls -la
$ !!:p
ls -la
실행하지 않고 이전 명령으로 인쇄되며 ↑(위)를 눌러 검색 하고 편집 할 수 있습니다.
당신은 또한 할 수 있습니다
!123:p
123rd 명령을 이전 명령으로 인쇄합니다.
답변
fc
명령을 사용하여 기록에서 명령을 편집 할 수도 있습니다 .
FC는 목록 또는 편집 및 reexecutes이 명령은 이전에 대화 형 쉘에 입력 한 유닉스의 표준 프로그램입니다. fc 는 bash 쉘
에 내장 된 명령입니다 . 도움말 fc 는 사용 정보를 표시합니다.
역 증분 검색 ( Ctrl+ R) 외에도 bash 단축키가 더 있습니다 .
에서 man bash
:
이전 기록 (Cp) 히스토리 목록에서 이전 명령을 가져와 목록에서 뒤로 이동합니다. 다음 역사 (Cn) 목록에서 앞으로 이동하여 내역 목록에서 다음 명령을 가져옵니다. 역사의 시작 (M- <) 기록의 첫 번째 줄로 이동합니다. 기록 끝 (M->) 입력 이력의 끝, 즉 현재 입력중인 줄로 이동합니다. 역 검색 기록 (Cr) 현재 줄에서 시작하여 필요에 따라 기록을 '위로'이동하여 뒤로 검색합니다. 이것은 증분 검색입니다. 전방 검색 기록 (Cs) 현재 줄에서 시작하여 필요에 따라 기록에서 '아래로'이동하여 앞으로 검색합니다. 이것은 증분 검색입니다. 비 증분 역 검색 기록 (Mp) 사용자가 제공 한 문자열에 대한 비 증분 검색을 사용하여 현재 행에서 시작하는 히스토리를 뒤로 검색합니다. 비 증분 순방향 검색 기록 (Mn) 사용자가 제공 한 문자열에 대한 비 증분 검색을 사용하여 기록을 앞으로 검색합니다. yank-nth-arg (MCy) 첫 번째 인수를 이전 명령 (일반적으로 이전 줄의 두 번째 단어)에 삽입합니다. 인수 n을 사용하여 이전 명령의 n 번째 단어를 삽입합니다 (이전 명령의 단어는 단어 0으로 시작). 음수 인수는 이전 명령의 끝에서 n 번째 단어를 삽입합니다. 인수 n이 계산되면 "! n"히스토리 확장이 지정된 것처럼 인수가 추출됩니다. yank-last-arg (M-., M-_) 이전 명령 (이전 기록 항목의 마지막 단어)에 마지막 인수를 삽입합니다. 인수를 사용하면 yank-nth-arg와 똑같이 동작합니다. yank-last-arg에 대한 연속적인 호출은 히스토리 목록을 통해 다시 이동하여 각 행의 마지막 인수를 차례로 삽입합니다. 히스토리 확장 기능은 "! $"히스토리 확장이 지정된 것처럼 마지막 인수를 추출하는 데 사용됩니다. MCE (shell-expand-line) 셸처럼 줄을 확장합니다. 이것은 별칭 및 히스토리 확장뿐만 아니라 모든 쉘 단어 확장을 수행합니다. 역사 확장에 대한 설명은 아래 역사 확장을 참조하십시오. 히스토리 확장 라인 (M- ^) 현재 행에서 히스토리 확장을 수행합니다. 역사 확장에 대한 설명은 아래 역사 확장을 참조하십시오. 마지막 인수 삽입 (M-., M-_) yank-last-arg의 동의어입니다. 운영 및 다음 획득 (Co) 실행을 위해 현재 행을 승인하고 편집을 위해 히스토리에서 현재 행에 상대적인 다음 행을 가져옵니다. 모든 인수는 무시됩니다. 편집 및 실행 명령 (C-xC-e) 현재 명령 줄에서 편집기를 호출하고 결과를 셸 명령으로 실행합니다.
답변
!123:gs/old/new/
‘old’문자열을 ‘new’문자열로 바꾸는 명령 123을 실행합니다.
답변
M-^ (Mac의 경우 option-shift-6)을 눌러 편집 모드로 이동할 수 있습니다.
이것을 입력하십시오 :
! 123M- ^
그리고 명령 # 123을 편집 할 것입니다. ctrl-r을 사용하는 것과 비슷하지만 느낌표 구문으로 시작합니다.
답변
history
명령 을 사용하는 대신 history-search-backward
/ history-search-forward
를 쉽게 기억할 수있는 키 바로 가기에 바인딩 합니다 (PgUp / PgDown 선호). 그렇게하려면 다음을 .inputrc
파일에 넣으십시오 .
"<key code>": history-search-backward
"<key code>": history-search-forward
를 얻으려면 셸에 <key code>
입력 Ctrl-V <key>
하고 출력 된 내용에서 시작 ^[
을 \e
로 바꿉니다.
이 설정이 끝나면 입력 some
하고 PgUp을 눌러 some_long_command
. 필요 some_long_command with_some_arg
하지만 some_long_command with_some_other_arg
나중에 비슷한 명령 이있는 경우 입력 some
한 다음 PgUp을 반복해서 눌러 도달 할 때까지 순환 하거나를 입력 하고 PgUp을 누르고 some
두 명령이 다른 위치로 커서를 이동합니다. 몇 개의 문자를 입력하고 PgUp을 한 번 더 누르십시오. 유사한 명령을 빠르게 페이지를 넘기거나 구분할 수있는이 기능은 내 생각에 Ctrl-R
.
답변
당신은 또한 넣을 수 있습니다
shopt -s histverify
에서 .bash_profile
실행하지 않고 히스토리 확장이 명령 줄에 나타나므로 편집하기 전에 편집 할 수 있습니다.