.bash_history 파일에 별칭 대체 텍스트 표시

.bash_history 파일에 별칭 대체 텍스트 표시

내 bash 초기화 파일(.bash_profile 등) 중 하나에 다음 별칭이 있다고 가정합니다.

alias gs='git status'

.bash_history 파일에 별칭 "gs" 대신 "git status"라는 대체 텍스트를 표시하도록 하려면 어떻게 해야 합니까?

답변1

나는 이것이 불가능하다고 생각한다.

나는 이것을 시도했습니다 :

alias foo="echo foo;fc -e /home/hl/tmp/testscript.sh 0"
start cmd:> cat /home/hl/tmp/testscript.sh
#! /bin/bash

set -x

# simple case
#test -f "$1" || exit 1
#echo ": alias replacement : echo foo" >"$1"


# complex case
IFS= read -r line <"$1"
: line: _"$line"_
case "$line" in
        foo)
                echo ": alias replacement : echo foo" >"$1"
        ;;
        bar)
                echo ": alias replacement : echo bar" >"$1"
        ;;
        *)
                echo ": alias replacement error" >"$1"
        ;;
esac

아이디어는 실제 명령을 실행한 다음 bash내장된 를 통해 수행할 수 있는 명령 기록을 즉시 수정하는 것입니다 fc.

  1. fc파일을 편집한 다음 실행할 수 있습니다. 이는 prepend와 같은 더미 명령을 작성하여 부분적으로 해결할 수 있습니다 :.

  2. 기록은 실행된 명령이 아닌 행을 기반으로 합니다. 따라서 수정할 명령은 아직 스택에도 없습니다. 코드를 삽입하는 등의 사악한 방법으로 해결될 수도 있지만 $PS1시도하고 싶지는 않습니다...

내장된 역사

위의 방법으로 "아직 스택에 없음" 문제를 공유하는 더 좋은 방법이 있을 수 있습니다. 내장 기능에 대해서는 잘 모르겠습니다 history. 이 명령을 사용하면 기록 파일을 쓰고 읽을 수 있습니다. 그래서 이것은 작동합니다 :

  1. 파일 쓰기
  2. 예를 들어 파일을 수정합니다 sed.sed -i 's/^gs$/git status/' ~/.bash_history
  3. 파일 읽기

히스토리 스택 문제는 다음과 같은 방법으로 해결할 수 있습니다(시도하지는 않았습니다).

alias foo="echo foo;(sleep 1; history ...) &"

관련 정보