셸의 느낌표는 외침이 아니다: 반복 입력을 줄이는 ! 활용법

3 days ago 7

bash, csh, tcsh, zsh의 이벤트 지정자는 이전 명령이나 인수를 직접 참조해 반복 입력과 히스토리 탐색을 줄여줌 ![event][:word][:modifier] 형식으로 명령 선택·단어 추출·문자열 변환을 하나의 표현식에 조합할 수 있음 !!로 직전 명령을 재실행하고, !$로 마지막 인수를 가져오며, !ssh로 최근 ssh 명령을 찾고, !$:h로 마지막 인수의 디렉터리 부분만 추출함 POSIX의 fc는 이전 명령 하나 또는 여러 개를 선호하는 편집기에서 수정한 뒤 실행하며, 범위 지정과 문자열 치환도 지원함 주로 대화형 셸에서 쓰는 기능이므로 모든 문법을 외우기보다 자주 쓰는 표현만 익히고, 필요하면 히스토리 확장을 비활성화하면 됨 명령줄의 반복 입력 줄이기 이벤트 지정자는 1970년대 후반부터 존재했으며, 이전 명령과 인수를 다시 입력하지 않고 직접 참조하게 해줌 주요 대상은 bash, csh, tcsh, zsh이며, 다른 POSIX 호환 셸에서는 fc 를 활용할 수 있음 이전 명령의 일부를 다음처럼 재사용함 echo "done with !:1"은 직전 명령의 첫 번째 인수를 가져옴 cd !$:h는 직전 명령의 마지막 인수에서 디렉터리 부분을 추출함 !ssh는 ssh로 시작한 가장 최근 명령을 실행함 별도 설정이 없다면 대화형 셸에 적용되며, 셸 스크립트에서 사용하는 기능은 아님 DRY를 명령줄에 적용하기 권한 부족으로 실패한 명령은 sudo !!를 입력해 sudo와 함께 다시 실행할 수 있음 mkdir /var/mnt/cache 다음에 cd !$를 실행하면 방금 생성한 디렉터리로 이동함 touch ~/projects/work/awesome.sh에 이어 cd !$:h를 입력하면 파일이 속한 디렉터리로 이동함 기존 명령의 인수 범위도 재사용할 수 있음 ssh 10.240.33.110 !:2*는 직전 ssh 명령의 세 번째 단어부터 마지막까지 가져와 포트와 키 옵션을 재사용함 파일 경로를 변형해 후속 명령에 활용할 수도 있음 ffmpeg -i /recordings/a-sunny-day.mov !#:2:r.mkv는 현재까지 입력한 명령의 경로에서 확장자를 제거하고 .mkv를 붙임 이어서 scp !$:r.* example.com:/media를 실행하면 직전 마지막 인수의 확장자를 제거한 뒤 모든 확장자와 일치하는 경로를 만듦 이벤트 지정자의 세 가지 구성 요소 이벤트 지정자는 ![event][:word...

Read Entire Article