답변:
최근에 실행 된 명령을 나타내는 경우보다 효율적인 방법은 음수로 명령을 참조하는 것입니다.
!-4; !-3; !-2; !-1
또한 일단 실행하면 마지막 기록 항목에 전체 명령 체인이 포함되므로를 사용하여 반복 할 수 있습니다 !!
.
편집 :
당신이하지 않았다면, 위대한 내장 기능에 익숙해 질 fc
, 질 언급 . (을 사용하십시오 help fc
.) 음수를 사용할 수도 있으므로 위와 동일하게 사용할 수 있습니다.
eval "`fc -ln -4 -1`"
그러나 여기에는 한 가지주의 사항이 있습니다.이 후에 eval
행은 마지막 명령으로 내역에 저장됩니다. 다시 실행하면 루프에 빠지게됩니다!
이 작업을 수행하는보다 안전한 방법은 기본 fc
작업 모드 를 사용하는 것입니다 . 선택한 명령 범위를 편집기로 전달하고 종료 한 후에 실행합니다. 시험:
fc -4 -1
명령 범위의 순서를 반대로 바꿀 수도 있습니다. fc -1 -4
man fc
나에게 아무것도주지 않습니다. 무엇 fc
을 의미합니까? 다른 옵션이 있습니까?
help fc
... 및 help help
.... help : help [-dms] [pattern ...] 내장 명령에 대한 정보를 표시합니다.
-l
플래그가 없으면 악이 필요없이 실행됩니다 eval
.
fc
.
Bash 히스토리에서 여러 명령을 순차적으로 실행하는 훌륭하고 대체적인 방법이 있습니다.
히스토리 대체 ( !432
또는 !-4
) 를 사용하는 대신 Ctrl+로 히스토리를 검색 할 수 있으며 r원하는 첫 번째 명령을 찾은 후 키 대신에 run, hit Ctrl+ o( opera-and-get-next ) 명령
을 실행 하고 기록에서 다음 명령을 제안합니다 . 당신 이 원하는만큼 많은 시간을 가할 수 있고 마지막을 위해 시퀀스를 끝내 거나 시작하지 않고 멈출 수 있습니다.return
Ctrl+oreturnCtrl+c
Ctrl-o
는 리터럴을 출력하고 ^o
내를 깨뜨 립니다 (reverse-i-search)
. 다른 설정이있을 수 있습니다.
명령을 편집하지 않고 즉시 명령을 실행하려면 eval을 사용하여 구문 적으로 더 얇은 Giles 응답 버전이 있습니다 .
fc -e: 432 435
-e에 대한 콜론 인수는 bash noop이며, fc가 원하는 "편집기에서 열기"단계를 건너 뛰는 효과가 있습니다. 또한 (최근) 히스토리에는 eval 문이 아니라 히스토리의 실제 명령이 포함됩니다.
fc
for 루프와 xsel
마지막 n 명령을 여러 번 연결하고 다시 실행하려는 경우 잘 작동합니다.
fcn() (
from="${1:-2}"
to="${2:-1}"
if [ "$from" -ne "$to" ]; then
for i in `seq "$from" -1 "$(($to + 1))"`; do
printf "$(fc -ln -${i} -${i}) && "
done
fi
printf "$(fc -ln -${to} -${to})"
)
그때:
$ echo a
a
$ echo b
b
$ echo c
c
$ fcn 3 1 | xsel -b
$ # Paste.
$ echo a && echo b && echo c
a
b
c
$ # Paste again if you feel like it.
$ echo a && echo b && echo c
a
b
c
또는 약간의 편집이 필요한 큰 명령의 경우 :
fcn 3 1 >cmds.sh
vi cmds.sh
bash cmds.sh
bash cmds.sh
history -p \!43{2..5}
후속 복사 / 붙여 넣기에 적합한 명령 432-435를 터미널에 인쇄하도록 입력 할 수 있습니다.