테크매니아
Bash - History editing 본문
반응형
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/ | old 를 new 로 대체 |
p | 실행하지 않고 출력함 함 |
예시
echo This is great day
#마지막 명령어의 전체 word중에서 great를 wonderful로 대체한 뒤 실행시키지 않고 출력만 한다.
fc -s !!:0-$:s/great/wonderful/:p
# 출력
fc -s echo this is wonderful day
반응형