【发布时间】:2015-08-23 10:27:42
【问题描述】:
我编写了这个函数,用于向 .bashrc 文件添加别名。 该功能运行良好但不完整,如果添加的别名已经存在,我想请求用户确认并编写if条件以实现代码的“修改”部分,如果给出确认,就像安装新软件包时。
add_alias(){
d_alias=$1
d_command="$2"
replacing=alias|grep "alias $d_alias"
if [[ "$replacing" -ne 0 ]];
then
sed -i "/alias $d_alias/d" $HOME/.bashrc
echo "alias $d_alias modified in ~/.bashrc"
else
sed -i ':a;$!{N;ba};s,\(auto-generated code\),\1\nalias '"$d_alias"'='"'$d_command'"',2' $HOME/.bashrc
source ~/.bashrc
echo "alias $d_alias added to ~/.bashrc"
fi
}
#auto-generated code
alias brc='source ~/.bashrc'
alias client='/home/user/workspace/client'
alias workspace='/home/user/workspace'
【问题讨论】:
-
用内置的
alias测试别名的存在是很简单的(例如,如果别名hello存在,alias hello &>/dev/null返回 0,否则返回 1)。然后使用read -p提示确认。 -
当然!请添加正确的答案。
-
懒得这么做;) 随意自己写一个答案。
-
另外,我没有详细阅读您的代码,但
sed可能有点矫枉过正。只需alias "$d_alias" "$d_command",然后alias "$d_alias" >>~/.bashrc就足够了,因为自动生成的代码是.bashrc的最后一部分。 -
如果有多个别名以同名开头的 ex:别名 Koba 和别名 KobaLoki?以及您的第 4 行如何:replacement=alias|... 正在工作(我收到一个错误,因为您没有使用 shell 来获取变量替换的输出,这假设您在 BASH 中)。如果 $1 参数是另一个别名的一部分,您最终将删除所有以 $1 作为别名开头的别名。我认为您应该在插入/删除别名时注意检查自动换行。
标签: linux bash auto-generate aliases