기록에서 마지막으로 실행된 명령을 문자열로 가져와 bash의 변수에 저장합니다.

기록에서 마지막으로 실행된 명령을 문자열로 가져와 bash의 변수에 저장합니다.

마지막으로 실행된 명령과 옵션을 가져와서 파일에 쓸 문자열로 저장하려고 합니다. 사용해 보았지만 fc다음 명령만 제공됩니다(어쨌든 나에게는). 또한 입력할 때 올바른 명령을 제공하려고 시도했지만 !!:p함수 자체 내에서 작동하도록 할 수 없는 것 같습니다. 이 작업을 완료할 수 있나요?

이것이 일어난 일입니다. arg제가 원하는 문자열입니다.

#!/bin/bash                                                                     

foo(){
    read HISTNUMVAR < histnum.txt
    TEMPHNV=$(fc -l 0 | grep -o '^[0-9]*');
    if [ $TEMPHNV -ne $HISTNUMVAR ]; then
        arg=$(***last history command here***);
        ./write_arg_to_file.sh $arg;
    fi
    echo $TEMPHNV > histnum.txt;
}

이 스크립트는 올바른 명령 기록을 가져오는 것 외에 필요한 모든 작업을 수행합니다.

답변1

더 깔끔한 방법이 있을 수 있지만 다음을 사용하여 기록에서 이전 명령을 가져올 수 있습니다.

prev=$(fc -ln | tail -2 | head -1)

답변2

나는 몇 가지 일을 처리할 수 있었습니다. 명령줄에서 다음을 사용합니다.

history 2 | sed 's/^ *[^ ]* *//' | cut -d$'\n' -f1

스크립트 내에서 사용됩니다:

arg=$(history 1 | sed 's/^ *[^ ]* *//')

그러면 명령과 모든 옵션이 문자열로 성공적으로 저장됩니다.

답변3

비대화형 사용을 위해 기본적으로 비활성화되어 있으므로 스크립트에서 기록 확장을 활성화해야 할 수도 있습니다. set -H그러면 문제가 해결될 것입니다.

테스트되지 않았지만 이것이 arg="!!"작동할 것이라고 생각합니다.

관련 정보