Bash 함수를 사용하여 Bash 래퍼 만들기

Bash 함수를 사용하여 Bash 래퍼 만들기

bash 기록 설정을 망칠까봐 조금 걱정됩니다. 나만의 사용자 정의 bash 기록을 작성하고 싶습니다. 나는 다음과 같은 bash 기능을 사용하는 것에 대해 생각했습니다.

bash(){

  # write to a custom history file manually
  echo "$@" >> $HOME/my_bash_history

  command bash "$@" 

}

export -f bash;

그러나 그것은 정확히 작동하지 않습니다. 무슨 일이 일어나면 그것이 인계되고 command bash더 이상 bash 기능을 거치지 않게 됩니다. 모든 것이 사용자 정의 파일에 기록되도록 이 bash 기능을 실행하려면 bash의 모든 표준 입력이 필요합니다. 이 작업을 수행하는 방법을 아는 사람이 있나요?

답변1

원하는 것은 DEBUG트랩(모든 명령 전에 실행)이거나 트랩 PROMPT_COMMAND(모든 프롬프트 전에 실행)일 수도 있습니다.

함정이 당신의 시도에 더 가깝습니다. 기본 개념은 다음 항목에 설명되어 있습니다.bash에는 명령을 실행하기 전에 실행되는 후크가 있습니까?완전한 턴키 버전이 존재합니다.bash 사전 실행.

저자에 따르면 bash-preexec의 목적은 다음과 같습니다.바쉬하브"클라우드의 bash 기록"을 제공하므로 "파일의 bash 기록" 작업을 수행할 수 있다고 확신합니다.

답변2

당신은 동등한 것을 달성하려고 노력하고 있습니다이 "영원한 역사":

export HISTTIMEFORMAT="%s "
PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND ; }"'echo $$ $USER \
           "$(history 1)" >> ~/.bash_eternal_history'

핵심 아이디어는 history 1bash에 제공된 마지막 줄을 (bash에서) 나열하는 것입니다.

$ echo "$(history 1)"
12766  2019-05-31T20:14:44+0000 echo "$(history 1)"

실제로는 스크립트 내(같은 줄이 아님) 내에서만 의미 있는 값을 갖습니다.

bash의 새로운 줄마다 PROMPT_COMMAND명령을 실행합니다 .history

IMO: 함수 이름을 지정하는 것은 좋은 생각이 아닌 것 같습니다 bash.

관련 정보