改进了从命令行向.bashrc添加别名的功能



我写了这个函数,我用它来添加别名到。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),1nalias '"$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'

我正在添加一个答案以供将来参考,感谢@4ae1e1和@ArunSangal。他们的建议在评论中。

# 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),1nalias '"$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),1nalias '"$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"

此函数为当前shell和~/添加别名。同时使用bash_alias。我之前总是手动测试别名提交给add-alias。它对我很有效,我已经用了很长时间了。我当然不运行生产系统。

YMMV .

add-alias ()  
{  
local name=$1 value="$2"  
echo alias $name='$value' >> ~/.bash_aliases  
eval alias $name='$value'  
alias $name  
}  

可以加上& &;功能。

最新更新