나는 결국 이 대본을 작성하게 되었다. 그 이유는 마지막에 설명하겠습니다.

나는 결국 이 대본을 작성하게 되었다. 그 이유는 마지막에 설명하겠습니다.

별칭을 자동으로 저장할 수 있는 명령줄 도구/스크립트가 있습니까? 예를 들어

save-alias my-ip="curl ipecho.net/plain"

별칭을 정의한 다음 ~/.bashrc 또는 ~/.zshrc에 추가/업데이트합니다.

별칭을 정의한 다음 자동으로 저장하는 스크립트를 작성하려고 합니다. 매번 구성 파일에 별칭을 수동으로 추가해야 하는 것은 성가신 일입니다. 하지만 저는 바퀴를 다시 발명해야겠다고 생각했고 여러분은 이미 이 성가심에 대한 몇 가지 해결책을 가지고 있습니다.

편집: 결국 답변에서 찾을 수 있는 스크립트를 작성했습니다.

답변1

이것은 실제로 좋은 생각입니다. 나는 다음과 같은 함수를 만들 것이다.

addalias() {
    echo "alias ${1}" >> $HOME/.bash_aliases
}

내 계정에 추가하고 .bashrc로그아웃한 후 다시 로그인하세요.

사용법은 다음과 같습니다:

addalias ..='cd ../../'

답변2

추가하고 즉시 사용 가능하게 하려면 다음 안내를 따르세요.

# In your .bashrc or .bash_profile file, add:
newalias() {echo "alias ${1}" >> $HOME/.bash_aliases; source ~/.bash_aliases; }

.bash_aliases파일을 사용한다는 의미입니다.그리고.bashrcor 에서 시작 .bash_profile하고 라인을 사용하십시오.

. ~/.bash_aliases

어떤 사람들은 처음에 .bash_aliases 파일이 없고 현재 자신의 또는 .bash_aliases 파일 .bashrc에 정의된 별칭만 갖고 있을 수도 있습니다 .bash_profile. >>파일이 현재 존재하지 않으면 생성되고, 그렇지 않으면 파일이 추가되기 때문에 여전히 작동합니다 . .bash_aliases그러나 이에 대한 참조를 수동으로 추가해야 할 수도 있으며 지금은 기존 별칭을 해당 참조로 이동하는 것을 고려할 수도 있습니다.

답변3

나는 결국 이 대본을 작성하게 되었다. 그 이유는 마지막에 설명하겠습니다.

.aliases 파일에 새 별칭을 추가하고 즉시 로드합니다. 중복 항목을 두 번 추가하지 않으므로 동일한 별칭을 여러 번 정의하면 구성 파일에 중복 항목을 스팸으로 보내는 대신 이전 버전이 업데이트됩니다.

ALIASES_FILE_PATH=$HOME/.aliases

function save-alias() {

    ALIAS_NAME=`echo "$1" | grep -o ".*="`

    # Deleting dublicate aliases
    sed -i "/alias $ALIAS_NAME/d" $ALIASES_FILE_PATH

    # Quoting command: my-alias=command -> my-alias="command"
    QUOTED=`echo "$1"\" | sed "s/$ALIAS_NAME/$ALIAS_NAME\"/g"`

    echo "alias $QUOTED" >> $ALIASES_FILE_PATH

    # Loading aliases
    source $ALIASES_FILE_PATH
}

다른 버전

별도의 파일을 별칭으로 사용하는 대신 구성 파일 자체(.zshrc 또는 .bashrc)에 별칭을 저장합니다. 또한 원하는 경우 별칭 아래에 다른 콘텐츠를 유지할 수 있도록 구성 파일의 지정된 위치에만 별칭을 추가합니다. "# END ALIASES" 앞에 별칭이 추가되므로 정확한 문자열이 있는지 확인하세요. 예를 들어 구성 파일은 다음과 같습니다.

plugins=(git)
#and bla bla bla

# ALIASES
alias test-alias="echo I was added automatically"
# END ALIASES

# Yes you can have the bottom of the config file free.
# Because it will store aliases inside ALIASES block 
source $ZSH/oh-my-zsh.sh
# and etc

이는 다음 코드를 사용하여 수행됩니다.

CONFIG_PATH=$HOME/.zshrc

function save-alias() {

    ALIAS_NAME=`echo "$1" | grep -o ".*="`


      # Checking whether the alias name is empty. 
      # Otherwise sed command later will match and delete every alias in the file
    if [[ -z "$ALIAS_NAME" ]]; then
      echo 'USAGE: save-alias alias_name="command" ' 1>&2
      echo '       save-alias hello="echo hello world" \n' 1>&2
      echo "Wrong format. Exiting..." 1>&2
      exit 1
    fi

    # Deleting dublicate aliases
    sed -i "/alias $ALIAS_NAME/d" $CONFIG_PATH

    # Quoting command: my-alias=command -> my-alias="command"
    QUOTED=`echo "$1"\" | sed "s/$ALIAS_NAME/$ALIAS_NAME\"/g"`

    # Appending the command to the config (before "# END ALIASES")
    sed -i "/# END ALIASES/i alias $QUOTED" $CONFIG_PATH

    #reloading config file.
    source $CONFIG_PATH
    # instead of reloading the whole config you might want to append
    # to a new file as well, then source it and then rm new file
}

여기에 다른 솔루션이 제안되지 않는 이유는 무엇입니까?

echo "alias ${1}" >> $HOME/.bash_aliases

그들은 두 가지 문제가 있습니다.

1. 견적이 제거됩니다.

위 명령("save-alias"로 표시됨)을 사용하면 다음 명령이 실패합니다.

save-alias test-alias="echo hello world"

따옴표가 제거되고 아래와 같은 명령이 추가되므로 실패합니다.

alias test-alias=echo hello world

다음 오류로 인해 실패합니다.

bash: alias: hello: not found
bash: alias: world: not found

해결책은 큰따옴표를 사용하는 것입니다.

save-alias test-alias='"echo hello world"'

이건 좀 짜증난다

2. 중복 항목을 추가합니다.

명령을 두 번 실행하면 동일한 별칭이 구성 파일에 두 번 추가됩니다.

alias test-alias="echo hello world"
alias test-alias="oh no the config file is getting spammed" 

관련 정보