내가 다음과 같은 간단한 예를 가지고 있다고 가정 해보십시오 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
그것을 모두 한 줄에 배치하여 실행할 것입니다.
답변
편집 : 수정 명령 도구를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
실제로 적절한 매우 적은 경우 중 하나입니다 !
참조 :
답변
간단한 답 : 대신에 !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
원하는대로 붙여 넣기 를 반복하십시오 .