Bash – History editing

Table of Content

History expansion

history는 !를 이용해 확장 기능을 쓸 수 있다. 확장기능을 사용하면 더 다양하게 히스토리를 변경 및 실행할 수 있다. 확장기능은 히스토리에 대해 쉘의 quoting convention (따옴표 쓰는 방법)과 비슷한 기능을 제공한다. \(backslash)를 이스케이프 시퀀스로 쓰거나 ' (single qoute)를 verbatim sequence (축자문자열)쓰는데 활용하게 해준다. 아래의 예시처럼 사용하면 된다.

# 마지막 커맨드
history !!
# echo로 시작하는 최근 커맨드 리스트
fc !echo

Event Designator

현재 커맨드를 기준으로 히스토리의 커맨드에 대한 진입점을 제공한다.

command 예시

command Description
!n 최근 N개의 커맨드
!-n 뒤로 N번째 커맨드
!string string으로 시작하는 커맨드
^string1^string2 string1을 string2로 바꾸어 마지막 커맨드를 재실행

Word Designator

Event Designator로 진입점을 잡은 명령어들의 단어에 대한 조작이 필요할 때 사용한다. 와일드카드도 사용 가능하며 event designator와 :으로 구분하여 사용한다.

command 예시

command Description
0 0번째 word. 대부분의 경우 커맨드 자체
n n번째 word. 커맨드 뒤에 따라오는 word
^ 첫번째 word
$ 마지막 word
* 첫번째 word를 제외한(즉, 커맨드를 제외한) 모든 아규먼트. 1~$와 동일함

예시

echo This is great day

# 마지막 명령어의 3번째 word를 `wonderful`로 대체하여 echo한다
fc -s !!:3=wonderful echo
# 출력
fc -s great=wonderful echo
echo this is wonderful day
this is wonderful day

Modifier

word에 대한 처리를 진행한다. word 바꾸기나 제거하기 등을 의미한다.

command 예시

command Description
h 경로를 지정하는 문자열에서 head만 남김. 즉 현재폴더까지 출력
r 경로를 지정하는 문자열에서 .XXX 형식에서 접미사를 뺌. 즉 파일 확장자 빼고 출력
t 경로를 지정하는 문자열에서 tail만 남김. 즉 현재 파일 또는 디렉토리까지 출력
s/old/new/ oldnew로 대체
p 실행하지 않고 출력함 함

예시

echo This is great day
#마지막 명령어의 전체 word중에서 great를 wonderful로 대체한 뒤 실행시키지 않고 출력만 한다.
fc -s !!:0-$:s/great/wonderful/:p
# 출력
fc -s echo this is wonderful day

Related Posts

답글 남기기

이메일 주소는 공개되지 않습니다.