Bash의 느낌표(!) 이해하기

Bash의 느낌표(!) 이해하기

나는 사용했다

history | less

이전 명령의 행과 왼쪽 숫자에서 반복하고 싶은 행(예: 22)을 찾아서 수행했습니다.

!22

명령 프롬프트에서는 내가 실행하고 있던 줄에서 일련의 명령을 실행했습니다. 느낌표가 어디에 사용되는지, bash가 어떤 조치를 취하는지, 어디에 사용하는지 모르겠습니다. 문서에서 "실질적인" 설명을 볼 수 없습니다.

답변1

!통화 기록 확장, 이 기능은 원래 다음에서 나타났습니다.C 쉘, 터미널에 화살표 키가 있다고 믿을 수 있었던 시절. 이는 현재 명령 번호를 프롬프트( PS1="\!$ ")에 추가하여 과거 명령의 번호를 화면에서 빠르게 볼 수 있는 경우 특히 유용합니다.

이제는 방향키나 검색 명령 기록 Ctrl-R같은 것을 사용할 수 있지만 그 기능은 별로 쓸모가 없을 것 같습니다.

!!이전 명령을 다시 실행하는 이 유용한 변형을 여전히 찾을 수 있습니다 . 그 자체로는 !!Enter명령이 보다 빠르다는 것을 찾지 못했지만 Enter더 큰 명령으로 결합하면 도움이 될 수 있습니다.

예:정상파일럿 오류존재하다sudo시스템 기반 접근 방식은 sudo추가 권한이 필요한 명령 앞에 접두사를 붙이는 것을 잊어버리는 것입니다. 초보자는 전체 명령을 다시 입력하십시오. 부지런한 학생들은 쉘의 명령 기록에서 명령을 편집합니다. 계몽형 sudo !!.

이러한 유형의 처리는 대화형 셸의 Bash에서 기본적으로 활성화되며 활성화 하거나 비활성화 !할 수 있습니다 . Zsh를 사용하여 비활성화할 수 있습니다 .set +o histexpandset +Hset -K

답변2

여기에 더 긴 답변이 없으면 최근에 읽었기 때문에 SuperUser에 대한 답변이 있어야 합니다. 내부에배쉬 매뉴얼 페이지다음과 같은 큰 섹션을 찾을 수 있습니다.역사적 확장이 문제에서는.

마지막 명령이나 명령 번호 X를 실행하는 대신 전체 호스트에서 작업을 수행할 수 있습니다. !cat로 시작하는 마지막 명령을 실행하는 등의 작업을 수행할 수 있습니다 cat. 또는 포함되어 있지만 로 바꾸는 !?bash?:s/bash/csh/마지막 명령을 실행하십시오.bashcsh

답변3

!다음과 같이 훨씬 더 많은 작업을 수행할 수 있습니다 .

  • 3개 명령 전에 입력한 명령을 실행합니다.!-3
  • 다음으로 시작하는 명령을 실행합니다.!ls

더있다. 바라보다당신이 알아야 할 15가지 리눅스 배시 기록 확장 예시

답변4

내 친구가 나에게 다음과 같은 이메일을 보냈습니다.

GNU 역사 도서관의 일부입니다. Bash에서는 기록의 명령을 다시 실행하는 데 사용됩니다. 하드코어해지고 싶다면 bash-4.1/lib/readline/histexpand.c에서 History_expansion_char을 grep하여 구현 세부 사항을 확인하세요.

관련 정보