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-preexec.

저자에 따르면 bash-preexec는 다음에서 사용됩니다.배쉬허브"클라우드의 bash 기록"을 제공하기 때문에 "파일의 bash 기록" 작업에 달려 있다고 확신합니다.

답변2

당신은이 "영원한 역사":

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

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

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

실제로 스크립트 내부에는 의미 있는 값(동일한 줄이 아님)만 있습니다.

그리고; bash에 주어진 각 새 줄에 대해 명령을 PROMPT_COMMAND실행합니다 .history

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

관련 정보