ProgramingTip

bash 히스토리를 사용하여 이전 명령을 가져오고 복사 한 다음 '실행'하지만 명령이 주석 처리됨

bestdevel 2020. 10. 15. 08:09
반응형

bash 히스토리를 사용하여 이전 명령을 가져오고 복사 한 다음 '실행'하지만 명령이 주석 처리됨


bash기술 을 향상시키기위한 질문 입니다. 나는 항상 소유한다 :

$ history | grep some_long_command

...
...
123 some_long_command1.........
124 some_long_command2.........
...

그런 다음 다음을 수행하여 언어 명령을 사용할 수 있습니다.

!123

그러나 나는 종종 이것을 가지고 싶다.

some_long_command1foobar

즉, 실행하기 전에 명령을 변경하십시오. 대신 bash를 사용 하여이 명령을 사용합니까?

#some_long_command1

그래서 그것은 주석을받습니다.

그런 다음 마우스를 사용하여 명령을 강조 표시하고 편집 한 다음 사용할 필요가 없습니다 (키보드를 더 빨리 사용할 수 있음).

펼쳐져있을 수 있습니다.하지만 이미 어딘가에 기능이 내장되어있을 가능성이 있습니다. ....?

감사합니다.


역사을 사용하는 명령 대신 ctrl+r해당 명령 을 사용 하고 입력 입력하는 것이 좋습니다 . 수정하러가는 것처럼 화살표 키를 표시하는 자동 완성 인식에서 나가고 실행하기 전에 찾을 수 있습니다.

업데이트 : 또한 이전 입력 한 주문을 계속 구매 ctrl+r


실제로 :p명령에 추가 하여 실행하지 않고 인쇄 할 수 있습니다. 예를 들면 :

$ ls -la
$ !!:p

ls -la실행하지 않고 이전 명령으로 인쇄 하고 (위로)를 누르고 검색 하고 편집 할 수 있습니다.

당신은 또한 할 수 있습니다

!123:p

123rd 명령을 이전 명령으로 인쇄합니다.


fc명령을 사용하여 기록에서 명령을 편집 할 수도 있습니다 .

WIKI 말한다,

FC는 목록 또는 편집 및 재실행이 명령은 이전에 대화 형 쉘에 입력 한 유닉스의 표준 프로그램입니다. fcbash내장 된 명령입니다 . 도움말 fc 는 사용 정보를 표시합니다.


역 증분 검색 (Ctrl+R)외에도 떠들썩한 파티 단축키가더 있습니다.

에서 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 (쉘 확장 라인)
    셸처럼 줄을 확장합니다. 이것은 모든 쉘 단어 확장 아니라 별명 및 히스토리 확장을 수행합니다. 역사 확장에 대한 설명은 아래의 역사 확장을 참조하십시오.
히스토리 확장 라인 (M- ^)
    현재 행에서 히스토리 확장을 수행합니다. 역사 확장에 대한 설명은 아래의 역사 확장을 참조하십시오.
마지막 인수 삽입 (M-., M-_)
    yank-last-arg의 동의어입니다. 
운영 및 다음 금액 (Co)
    실행을 위해 현재 행을 승인하고 편집을 위해 히스토리에서 현재 행에 최다 인 다음 행을 가져옵니다. 모든 인수는 무시됩니다.
편집 및 실행 명령 (C-xC-e)
    현재 명령 줄에서 편집기를 호출하고 결과를 셸 명령으로 실행합니다.


!123:gs/old/new/

'old'문자열을 'new'문자열로 바꾸는 명령 123을 실행합니다.


M- ^ (Mac의 경우 option-shift-6)을 계속 편집 모드로 실행할 수 있습니다.

제출 입력하십시오 :

! 1 억 3 천만-^

그리고 명령 # 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실행하지 않고 히스토리 확장이 명령 줄에 나타나므로 편집하기 전에 편집 할 수 있습니다.


"제안 상자"와 같은 기록 https://github.com/dvorka/hstr 을 시도해 볼 수 있습니다. Bash 기록을 읽고 빠른 탐색이 가능합니다.

hh

마지막 명령을 얻으려면 hh를 입력하고 명령으로 이동 한 다음 오른쪽 화살표를 사용하여 명령 줄 (편집 및 / 또는 주석 추가 가능)에서 가져옵니다.


유닉스 / 솔라리스에서 마지막으로 입력 한 명령을 얻으려면 ^ p


놓다

별칭 r = 'fc -s'

당신에 .bashrc(홈 디렉토리) 다음은 입력 할 수 있습니다

r <whatever>

명령 프롬프트 <whatever>에서 히스토리 에있는 마지막 명령 (동일한 매개 변수) 의 복사본을 실행합니다 . 당신이 필요하다고 느끼면 당신이 무엇을 실행했는지 보려면 위쪽 화살표를 누르십시오.

참고 URL : https://stackoverflow.com/questions/11000410/using-bash-history-to-get-a-previous-command-copy-it-and-then-run-it-but-with

반응형