내 파일에 다음과 같은 간단한 예가 있다고 가정해 보겠습니다 history
.
...
76 cd ~
77 ./generator.sh out.file
78 cp out.file ~/out/
79 ./out/cleaner.sh .
80 ls -alnh /out
...
77
, 78
, 명령을 하나의 명령으로 실행하고 싶은 경우 79
단축키가 있나요? 나는 이것을 시도했고 !77 !78 !79
이것은 단순히 한 줄에서 모두 실행될 것입니다.
답변1
편집: POSIX 호환 방식을 사용하여 이 작업을 수행할 수 있습니다.수리 명령도구fc
:
fc 77 79
vi
이렇게 하면 버퍼에 있는 명령 77~79가 포함된 편집기(아마도)가 열립니다 . 저장하고 종료하면( ) :x
명령이 실행됩니다 .
편집하고 싶지 않고 어떤 명령이 호출되는지 확실히 알고 있다면 다음을 사용할 수 있습니다.
fc -e true 77 79
명령을 편집하는 "편집기" 로 사용되므로 true
변경하지 않고 종료되고 명령은 그대로 실행됩니다.
원래 답변:
당신은 그것을 사용할 수 있습니다 :
history -p \!{77..79} | bash
이는 현재 실행 환경에만 존재하는 별칭, 함수 또는 변수를 사용하지 않는다고 가정합니다. 물론 시작되는 새 셸에서는 이러한 항목을 사용할 수 없기 때문입니다.
더 나은 해결책은 다음과 같습니다(댓글에서 알려준 Michael Hoffman에게 감사드립니다).
eval "$(history -p \!{77..79})"
실제로 맞는 매우 드문 상황 중 하나입니다 eval
!
또한보십시오:
답변2
간단한 대답: 대신 !77 !78 !79
,
!77; !78; !79
하고 싶은 일을 하려고 입력합니다 . 무조건 77을 명령하고, 그 다음 78을 명령하고, 그 다음 79를 명령하거나- 실행 명령어 77을 입력하여
!77 && !78 && !79
성공 여부를 확인합니다. 그런 다음 명령 77이 성공하면 명령 78이 실행됩니다. 그런 다음 명령 78이 성공하면 명령 79가 실행됩니다.
약간 더 스마트한 답변(터미널 유형 창에 있는 경우):
- 입력하는 다음 명령의 명령 번호를 찾으십시오.
- 이를 프롬프트에 포함시키는 것이 가능
\!
합니다PS1
. - 또는 기록 목록을 확인하세요. 마지막 항목이 이면
82 history
다음 명령은 83입니다.
- 이를 프롬프트에 포함시키는 것이 가능
- 83−77=6을 뺍니다.
- 유형
!-6
. 그러면 명령 77이 다시 실행됩니다. - 을 선택
!-6
하고 복사하여 붙여넣으세요. 다시 실행한 명령 77( )은./generator.sh
명령 83이었으므로 이제 명령 84를 실행하고 있으므로!-6
명령 78이 다시 실행됩니다. !-6
필요에 따라 반복합니다.