我正在尝试从github上的gist加载我的git别名。由于某些原因,该命令执行find,但是当我试图执行任何别名时,它们要么被错误地映射-例如,gsts ->Git stash代替gst ->Git状态-或者它们根本不映射
#!/bin/bash
update_git_aliases(){
GIST_URL='https://gist.githubusercontent.com/Moyoka22/ec605b0b52fee6d6d30d5f72822938f4/raw/git-aliases'
RESPONSE="$(wget --no-cache -qO- ${GIST_URL})"
if [ ${?} -ne 0 ]
then
echo 'Download failed. Exiting.'
return 1
fi
echo ${RESPONSE} > ${1}
chmod +x ${1}
}
DOWNLOAD_FAILED=0
ALIAS_FILE="${HOME}/.config/git-aliases"
if [ ! -f ${ALIAS_FILE} ]
then
echo "Git aliases not found! Downloading..."
update_git_aliases ${ALIAS_FILE}
DOWNLOAD_FAILED=${?}
fi
if [ ${DOWNLOAD_FAILED} -ne 0 ]
then
echo "Downloading aliases failed."
exit 1
fi
cat ${ALIAS_FILE} | bash
我假设您希望在交互式shell上使用别名,因此删除最后一个cat
,因为它是无用的,一旦创建了${HOME}/.config/git-aliases
$ source "${HOME}/.config/git-aliases"
别名命令必须在当前shell进程中运行才能生效。
cat ${ALIAS_FILE} | bash
在一个新的子进程中执行ALIAS_FILE中的别名命令,而不是你的shell,也不是程序的shell。
source
在当前shell中运行命令。您需要从当前shell(而不是从程序)中source
文件。您可以在文件更新后执行此操作。为了使其永久存在,您需要将source "${HOME}/.config/git-aliases"
添加到shell配置中。
像这样的许多程序所做的是在最后打印出必要的命令。
echo "$ALIAS_FILE updated"
echo "Make sure `source $ALIAS_FILE` is in your $HOME/.bash_profile"
echo "Run `source $ALIAS_FILE` to use it in your current shell"