마지막 명령을 파일에 어떻게 저장할 수 있나요?

마지막 명령을 파일에 어떻게 저장할 수 있나요?

Bash 쉘을 사용하여 분석을 실행할 때 좋은 결과를 제공하는 명령을 동일한 디렉토리(이름대로 "LOGBOOK")의 파일에 저장하여 내가 어떤 명령을 수행했는지 확인할 수 있는 경우가 많습니다. 이런 결과를 얻기 위해 이렇게 했습니다. 지금까지 이것은 터미널에서 명령을 복사하여 붙여넣거나 "위로"를 눌러 명령을 로 수정 echo"my command" >> LOGBOOK하거나 기타 유사한 장난을 의미합니다.

일전에 도구가 있다는 것을 알았지만 history, 이전에 실행한 명령을 가져와서 그런 작업을 수행할 수 있는 방법을 찾을 수 없었습니다 getlast >> LOGBOOK.

이를 수행하는 좋은 간단한 방법이 있습니까? 아니면 다른 사람들은 자신이 얻은 결과를 저장하는 명령을 어떻게 처리합니까?

답변1

를 사용하는 경우 bash다음 fc명령을 사용하여 원하는 방식으로 기록을 표시할 수 있습니다.

fc -ln -1

그러면 마지막 명령이 인쇄됩니다. -l목록을 나타내고 -n명령 번호를 줄 접두사로 사용하지 않음을 나타내며 -1마지막 명령만 표시됨을 나타냅니다. 줄 시작 부분의 공백(여러 줄 명령의 첫 번째 줄만)이 귀찮은 경우 를 사용하여 쉽게 제거할 수 있습니다 sed. 이것을 쉘 함수로 바꾸면 요청된 솔루션을 얻을 수 있습니다( getlast >> LOGBOOK).

getlast() {
    fc -ln "$1" "$1" | sed '1s/^[[:space:]]*//'
}

질문에 요청한대로 작동합니다.

"$1" "$1"명령에 추가하여 약간의 변경 사항을 추가했습니다 fc. 예를 들어, getlast mycommand호출된 마지막 명령줄을 인쇄 할 수 mycommand있으므로 다른 명령을 실행하기 전에 저장하는 것을 잊어버린 경우에도 명령의 마지막 인스턴스를 쉽게 저장할 수 있습니다. 인수를 전달하지 않으면 getlast(예: fcas 호출하면 fc -ln "" ""마지막 명령만 인쇄됩니다)

[참고: @Bram의 의견 및 @glenn jackman의 답변에 언급된 문제를 설명하기 위해 답변을 편집했습니다. ]

답변2

@camh의 답변에 대한 한 가지 문제점은 여러 줄에 걸쳐 있는 명령이 있는 경우 첫 번째 줄만 표시된다는 것입니다.

$ echo "one
> two
> three"
one
two
three

$ fc -lnr | head -1
         echo "one

이 시도:

$ alias getlast='fc -nl $((HISTCMD - 1))'

$ echo "one
> two
> three"
one
two
three

$ getlast
         echo "one
two
three"

답변3

"!!"위쪽 화살표를 사용하는 대신 를 사용하여 이전 명령을 참조할 수 있습니다.

예를 들어

$ some -long --command --difficulty="very hard to remember"
$ echo "!!" >> LOGBOOK

참고: 텍스트를 인용하지 않습니다.

답변4

fc -l | awk 'FNR == 15 {print $2}' > /tmp/last_command

나는 awk를 사용하여 fc -l 출력에서 ​​마지막 명령을 캡처하고 /tmp/last_command에 인쇄합니다.

관련 정보