bash 기록에서 일련의 명령을 실행하는 바로 가기가 있습니까?


20

내가 다음과 같은 간단한 예를 가지고 있다고 가정 해보십시오 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그것을 모두 한 줄에 배치하여 실행할 것입니다.


9
!77 ; !78 ; !79좋아?
thrig

1
그런 것 같아요 아무것도 (의 라인을 따라 더 간결 비트 라인으로 입력 라인의 짧은 괜찮습니다,하지만 뭔가 A에 대한 기대했다 !77-79)
MrDuk

1
@ MrDuk, 소년은 기억하는 데 시간이 좀 걸렸습니다. 매우 간결한 솔루션에 대한 업데이트 된 답변을 참조하십시오 ! :)
와일드 카드

마법이다! :)
MrDuk

답변:


28

편집 : 수정 명령 도구를fc 사용하여 POSIX 호환 방식 으로이 작업을 수행 할 수 있습니다 .

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
예를 들어 변수를 변경하거나을 수행 하여 명령 중 하나가 현재 실행 환경을 변경 하는 경우에는 올바르게 작동하지 않지만 이는 가장 cd중요한 경우입니다.
G-Man, 'Reinstate

3
eval "$(history -p \!{77..79})"작동해야합니다.
Michael Hoffman

1
@ MichaelHoffman, 나는 그것을 생각하고 그것을 시도했다고 생각했지만, 나는 인용을 생략했다는 것을 깨달았다! 도! 그것이 효과가 없었습니다 ... 지금 답변을 편집하십시오.
와일드 카드

14

간단한 답 : 대신에 !77 !78 !79,

  • !77; !78; !79명령 77을 실행 한 다음 명령 78을 실행 한 다음 무조건 또는 명령 79를 수행하려고 시도하는 것처럼 보이는 작업을 입력하십시오.
  • 입력 !77 && !78 && !79 명령 77을 실행하고 성공 여부를 확인 할 수 있습니다. 그리고 명령 77이 성공하면 명령 78을 실행하고 명령 78이 성공하면 명령 79를 실행하십시오.

약간 똑똑한 답변 (터미널 유형 창에있는 경우) :

  • 다음에 입력 할 명령 번호를 확인하십시오.
    • 프롬프트에이를 포함시킬 수 있습니다. \!귀하 의에 포함 되어 있다고 생각 합니다 PS1.
    • 또는 당신의 역사 목록을보십시오. 마지막 항목이 82 history인 경우 다음 명령은 83입니다.
  • 83-77 = 6을 뺍니다.
  • 을 입력하십시오 !-6. 명령 77이 다시 실행됩니다.
  • 를 선택하고 !-6복사하여 붙여 넣습니다. 명령 77 ( ./generator.sh)을 다시 실행 하면 명령 83이되었으므로 이제 명령 84에 있으므로 !-6명령 78을 다시 실행합니다.
  • !-6원하는대로 붙여 넣기 를 반복하십시오 .
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.