마지막 명령을 파일로 저장하려면 어떻게해야합니까?


29

bash 셸을 사용하여 분석을 실행할 때 종종 내가 사용한 명령을 동일한 디렉토리의 파일 (내 "LOGBOOK"이라고 함)에 저장하여 원하는 것을 확인할 수 있습니다. 나는 그 결과를 얻었습니다. 지금까지 이것은 터미널에서 명령을 copy.pasting하거나 "up"을 눌러 명령을으로 수정 echo"my command" >> LOGBOOK하거나 다른 유사한 익살을 의미했습니다.

history다른 날에 도구 가 있다는 것을 알았지 만 이전에 실행 한 명령을 얻는 데 사용할 수있는 방법을 찾을 수 없으므로과 같은 작업을 수행 할 수 있습니다 getlast >> LOGBOOK.

이것을 할 수있는 좋은 쉬운 방법이 있습니까? 또는 다른 사람들은 결과에 대한 명령 저장을 어떻게 처리합니까?

답변:


37

당신이 사용하는 경우 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의 답변에 언급 된 문제를 설명하기 위해 답변이 수정되었습니다.]


5
첫 번째 형식 fc -lnr | head -n 1은로 축약 될 수 있습니다 fc -lnr -1.
Bram

@ 브람 : 좋은 물건. help fc문서를 사용 하고 있었습니다 . bash 매뉴얼 페이지에는 부정적인 인덱스 사용을 포함하여 자세한 내용이 있습니다. head왼쪽에 하나의 명령이 내장되어 있으므로 제거 가 좋습니다. 이제 포크 / 실행이 없습니다.
camh

1
나는 명령이라고 이유를 궁금해 fc...
IMZ - 이반 Zakharyaschev


9

@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
수 있도록 cmdhist그 해결됩니다 ". 세트, bash는 시도가 같은 기록 항목에 여러 줄 명령의 모든 행을 저장하는 경우이 쉽게 여러 줄의 명령으로 다시 편집 할 수 있습니다."
Mark McKinstry

2

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

예 :

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

참고 : 이것은 리터럴 텍스트를 인용하지 않습니다


5
리터럴 명령은 캡처하지 않습니다. 쉘 메타 문자가 있으면 평가되고 대체됩니다. 파이프 라인도 끊어집니다 : ls | less-> echo !! >> LOGBOOK-> echo ls | less >> LOGBOOK.
camh

0

bash 쉘을 사용하는 경우 다음 명령을 사용하여이를 수행 할 수 있습니다.

$> history -a LOGBOOK

현재 세션의 모든 명령을 해당 파일에 추가합니다. ~ / .bashrc 파일에 별명을 추가하여 단일 명령으로이를 수행 할 수도 있습니다.

$> alias getlast="history -a LOGBOOK"

1
그러나 당신은 내가 일한 명령을 저장하고 내가 얻은 결과를 얻는 더 중요한 요구 사항을 놓치고 있습니다. 내가 한 모든 최근 명령 을 저장하고 싶지 않고 사용 후 명령을 선택하기 만하면됩니다. 어쨌든 고마워
MattLBeck
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.