별칭을 자동으로 저장할 수 있는 명령줄 도구/스크립트가 있습니까? 예를 들어
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
파일을 사용한다는 의미입니다.그리고.bashrc
or 에서 시작 .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"