너무 많이 누르지 않고 여러 명령을 다시 실행

너무 많이 누르지 않고 여러 명령을 다시 실행

당황스럽게도 이전 명령을 많이 반복하는 경우가 많습니다. Up Up Up첫 주문을 찾으러 갔어요 . Enter. 그런 다음 Up Up Up두 번째 명령을 다시 실행하십시오. 등.

명령을 다시 실행한 후 기록의 다음 명령으로 이동하는 방법이 있습니까? 마지막 세 개의 명령을 다시 실행 하기 위해 Up Up Up Shift+++를 실행하는 것과 비슷 합니다 .Enter ShiftEnter ShiftEnter

알아요 fc. 하지만 쉘에만 관한 것이 아닙니다. 저는 Python 인터프리터와 기본적으로 명령을 입력하는 모든 곳에서 이 문제에 직면했습니다.

답변1

이 모든 것은 귀하의 쉘 기록과 관련이 있으며 bash, 방금 귀하가 Python에 대해 질문하고 있다는 것을 알았습니다. 이게 도움이 되길 바란다.

당신이 history다음과 같다면:

1000   command A
1001   other command B
1002   yet another command C

다음을 실행할 수 있습니다. !com

그러면 ' ' 로 시작하는 마지막 명령이 실행됩니다 com. 문자 수( !c또는 !command)를 사용할 수 있으며 그 뒤에 !oth!yet각 명령을 순서대로 실행할 수 있습니다.

재실행 기록 항목 #1000을 실행 하면 다음 두 명령을 !1000알고 실행 !1001하게 됩니다 .!1002

개인적으로 이와 같은 일련의 명령을 실행하려면 동일한 명령과 같은 여러 명령을 실행하고 기록 항목을 제공할 것입니다.

command A; other command B && yet another command C

또는 별칭을 만듭니다.

$ alias doThing="command A; other command B && yet another command C"
$ doThing

또는 함수:

doThing() {
  command A
  other command B && yet another command C
  # Can also use positional arguments:  echo $1
}
$ doThing

이 모든 것을 고려해 볼 때, 제가 정확히 당신이 기대하는 바를 해낼 수 있을지 모르겠습니다. 죄송합니다.

답변2

bash실행하고 history1000, 1001, 1002라는 세 가지 명령을 실행하는 경우 :

$ history | tail 
...
1000  echo foo
1001  echo bar 
1002  echo baz 
1003  history | tail

에서는 bash줄 번호 앞에 를 붙여서 그 중 하나만 실행할 수 있습니다 !. 세미콜론으로 구분하여 한 줄에 모두 실행할 수도 있습니다.

$ !1000;!1001;!1002
echo foo;echo bar;echo baz
foo
bar
baz

참고: 평소와 같이 !히스토리를 사용하여 명령을 실행하면 먼저 실행할 명령줄이 표시됩니다.

이는 Python 인터프리터나 대부분의 다른 프로그램에서는 동일하지 않을 수 있습니다. 유사한 역사적 기능을 가진 다른 일부 쉘에서도 유사하게 작동합니다.

그런데 이 결합된 명령은 이제 기록에서 단 한 줄로 표시됩니다.

$ history | tail -2
1004  echo foo;echo bar;echo baz
1005  history | tail -2

를 사용하여 다시 실행할 수 있습니다 !1004.

답변3

Ctrl+ O. Up, Up, + , + , + 를 사용 Up하여 마지막 세 명령을 실행할 수 있습니다 .CtrlOCtrlOCtrlO

명령이 기록에 다시 추가되면 Ctrl+를 길게 눌러 O명령 순서를 반복할 수 있습니다.

~에서온라인 문서 읽기:

operate-and-get-next Ctrl+ O:

개행 문자가 입력된 것처럼 호출 애플리케이션으로 돌아가기 위해 현재 줄을 승인하고 편집을 위해 기록에서 현재 줄과 관련된 다음 줄을 가져옵니다. 제공된 경우 숫자 인수는 현재 줄 대신 사용할 기록 항목을 지정합니다.

이는 Readline 8.1에 비교적 새로운 추가 사항입니다. (2020년 12월.)

관련 정보