마지막 bash 입력 명령 인쇄(저장)

마지막 bash 입력 명령 인쇄(저장)

Bash에서 마지막으로 실행된 명령을 얻는 방법은 무엇입니까? 알아요!!:p는 마지막 명령을 인쇄하지만 bash 프롬프트 외에는 사용할 수 없는 것 같습니다. 시도했지만 echo !!:p인쇄되었습니다.

~/다운로드$pwd
다운로드
~/다운로드$에코!!:p
에코 비밀번호

이것을 변수에 사용 하고 싶기 PROMPT_COMMAND때문에 인쇄할 수 있도록 문자열로 가져와야 합니다. 찾을 수 있는 단축키가 있나요? 내가 잘못된 곳을 찾고 있는 걸까요?

아직은 모르는 것 같아요. 출력 후와 다음 프롬프트 전에 다시 표시할 수 있도록 마지막 명령 실행을 저장해야 합니다. 예를 들어 출력이 다음과 같기를 원합니다.

~/다운로드$pwd
다운로드

비밀번호
~/다운로드$

.bashrc파일의 프롬프트를 변경하고 있습니다.

PROMPT_COMMAND='echo -en "\033[38;5;2m"!!:p"\033[0m\n"'
PS1='\W\$'

하지만!! :p는 bash 프롬프트에서만 잘 작동합니다. 그렇다면 나중에 다시 인쇄할 수 있도록 마지막 명령을 어떻게 저장합니까?

답변1

history내장된 명령을 사용하여 방금 실행한 명령줄에 액세스할 수 있습니다. ( history 1방금 실행한 명령줄을 인쇄하는데 왜 fc -nl -1같은 명령줄을 인쇄하는지 모르겠습니다 fc -nl 0.)

PROMPT_COMMAND='echo -en "\033[38;5;2m"; history 1; echo -en "\033[0m\n"'

명령 텍스트 앞에 숫자가 인쇄됩니다. 해당 번호를 제거한 버전입니다. (히스토리 라인이 99999개보다 많으면 정확하지 않을 수 있습니다. bash가 해당 숫자의 형식을 어떻게 지정하는지 모르겠습니다.)

prompt_function () {
  local prompt_history="$(history 1)"
  prompt_history=${prompt_history:7}
  echo -En $'\033[38;5;2m'"$prompt_history"$'\033[0m\n'
}
PROMPT_COMMAND=prompt_function

(이것은 echo -en ..."$prompt_history"...명령줄에서 백슬래시를 확장하므로 echo -E쉘 확장을 사용하여 . 을 사용하여 $''제어 문자를 생성하도록 했습니다.)

관련 정보