명령 기록을 쉘 스크립트로 내보내기

명령 기록을 쉘 스크립트로 내보내기

소스에서 설치하려는 애플리케이션에 대해 빌드 도구에 대한 종속성을 구축해야 하는 등 복잡한 설치 프로세스를 따라야 하는 경우가 많습니다.

한 번 해본 후에는 내가 수행한 모든 단계를 기억하려고 노력하고 싶지 않습니다.

zsh(및 기타 셸)의 명령 기록에는 이미 내가 수행한 작업에 대한 기록이 있습니다. 예를 들어 최근 실행된 명령 100개를 .sh스크립트 로 내보낼 수 있습니까 ?

그런 다음 이 스크립트를 편집하고, 설치를 시작하기 전에 명령을 제거하고, 실수한 명령을 제거하고, 비슷한 환경에 있는 다른 사람에게 제공할 수 있는 설치 스크립트를 남길 수 있습니다. (또는 다른 컴퓨터에서 나 자신을 사용하십시오.)

내 명령 기록이 내 홈 디렉터리의 도트 파일 중 하나에 이미 저장되어 있는 것 같습니다.

답변1

내장 명령을 사용하면 fc여러 조건을 사용하여 기록에서 명령을 추출할 수 있습니다(참고 man zshbuiltins자료 참조).

fc"수리 명령"을 나타내며 인수 없이 호출되면 마지막으로 입력한 명령이 포함된 편집기가 열립니다. 편집기의 모든 기능을 사용하여 명령을 변경하고 zsh저장 및 종료 시 고정 명령을 실행할 수 있습니다. 기본적으로 사용되는 편집기는 이지만 쉘 변수를 사용하거나 명령을 통해 특정 편집기를 사용하려는 경우 vi이를 재정의할 수 있습니다 .EDITORfcFCEDIT

fc마지막 명령 외에도 기록을 조작하기 위한 다양한 옵션이 있으며 그 중 일부는 사용자가 요구하는 것을 정확하게 제공합니다.

-l옵션은 기록의 내용을 "나열"합니다. 기본적으로 마지막 16개 명령이 나열되지만 하한 및 상한을 지정하여 기록에 대한 인덱스로 지정하거나 명령의 시작 텍스트로 지정할 수도 있습니다. 음수 인덱싱은 마지막 명령에서 작동하므로 마지막 15줄이 추출됩니다.

fc -l -15

기본적으로 fc -l기록 인덱스는 출력의 첫 번째 열로 포함됩니다. 원하는 정확한 범위가 확보되면 -n숫자를 제거할 수 있습니다.

fc -ln -12 -5

해당 라인(12행부터 5행)만 스크립트에 적합한 형식으로 추출됩니다.

명령을 경계로 사용하는 것이 유용합니다.

fc -l rm ls

rm마지막 항목부터 시작하여 마지막 항목으로 끝나는 모든 기록을 나열합니다. 따라서 ls출력에는 하나의 명령이 있지만 여러 명령이 있을 수 있습니다.rmls

타임스탬프 추가, 부분 명령 교체, 부분 기록 로드 및 저장, 전체 기록 스택 전환 등 다양한 옵션이 있습니다.

답변2

@jimmij 수정

나는 원래 잘못된 쉘(zsh 대신 bash)을 염두에 두고 이 글을 썼습니다. 수정된 코드는 아래와 같습니다.

~에서이 stackoverflow 답변:

history | cut -c 8-

또한 기록을 특정 줄 수로 제한하려면 다음을 실행하십시오.

history -<number of lines> (history -20 prints the last 20 entries)

마침내:history -20 | cut -c 8- > commands_list.sh

파일 시작 부분에 아이콘을 누르면 작업이 완료됩니다.#!/bin/bash #!/bin/zshchmod +x commands_list.sh

관련 정보