I wrote this function which I use to add aliases to .bashrc file. The function works well but it's not complete, I would like to ask for confirmation from the user if the alias being added already exists and write the if condition in order to achieve the "modified" part of the code if confirmation is given, just like when you install a new package.
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'
I'm adding an answer for future reference, credits to @4ae1e1 and @ArunSangal. Their suggestions are in the comments.
# TODO Room to improve - add_alias()
# Add new aliases to this .bashrc file
#-------------------------------------
add_alias(){
n_alias=$1
shift
n_command="$@"
replacing=$( alias $n_alias 2>/dev/null|wc -l )
if [[ "$replacing" = "1" ]];
then
b $n_alias # cat|grep .bashrc in color
read -p "Do you wish to overwrite this(these) alias(es)? [y/n]" yn
case $yn in
[Yy]* ) sed -i '/alias '"$n_alias"'/d' $HOME/.bashrc;
sed -i ':a;$!{N;ba};s,\(auto-generated code\),\1\nalias '"$n_alias"'='"'$n_command'"',3' $HOME/.bashrc;
source ~/.bashrc;
echo "alias $n_alias modified in ~/.bashrc" ;;
[Nn]* ) echo "Operation canceled";;
* ) echo "Please answer yes or no.";;
esac
else
sed -i ':a;$!{N;ba};s,\(auto-generated code\),\1\nalias '"$n_alias"'='"'$n_command'"',3' $HOME/.bashrc
source ~/.bashrc
echo "alias $n_alias added to ~/.bashrc"
fi
}
alias aa='add_alias'
# end of add_alias()
# auto-generated code
alias cdn='ssh cdn'
alias cdn2='ssh cdn2'
alias sxdev64="ssh sxdev64"
alias csi="ssh csi"
alias malt="ssh malt"