linux alias 命令別名並輸出其原始命令


alias 功能固然好用,但在快捷方便的同時,隱藏了原始命令的結節。久而久之,不記得原始命令是什么了,因些,我想到了實現原命令輸出,以作為提示。先看效果圖吧。

 

 

/etc/bash.bashrc 文件追加代碼如下:
#環境變量
PASSWORD=root
PROGRAM=/usr/local
PACKAGE=/e/package

PHP=$PROGRAM/php
ZOOKEEPER=$PROGRAM/zookeeper
REDIS=$PROGRAM/redis


PATH=$PATH:$PHP/bin:$ZOOKEEPER/bin:$REDIS/bin

#history 配置
export HISTSIZE=1000; HISTTIMEFORMAT='%F '; HISTCONTROL="ignoredups"
export HISTIGNORE="ls:ll:pwd:history"

alias reload="source /etc/bash.bashrc"
alias command-list="compgen -ac"
alias on="execute 'reboot'"
alias off="execute 'poweroff'"

### 切換目錄 ###
alias cd-program="cd /usr/local"
alias cd-package="cd $PACKAGE"
alias cd-test="cd /e/develop/test"

alias search="execute 'apt search'"
alias update="execute 'sudo apt update && apt list --upgradable'"
alias upgrade="execute 'sudo apt -y upgrade'"
alias dpkg-list="dpkg --list | grep"
alias remove="execute 'sudo apt -y --purge remove'"
alias autoremove="execute 'sudo apt autoremove && sudo apt autoclean'" 


function color(){

    local color="$1"
    local colors=("-red", "-green", "-yellow", "-blue", "-white", "-black")
    
    if [[ "${colors[@]}" =~ $color ]];then shift 1; fi

    case "$color" in

        '-red')     echo -e "\033[31m$@\033[0m";;
        '-green')   echo -e "\033[32m$@\033[0m";; 
        '-yellow')  echo -e "\033[33m$@\033[0m";; 
        '-blue')    echo -e "\033[34m$@\033[0m";; 
        '-white')   echo -e "\037[32m$@\033[0m";; 
        '-black')   echo -e "\033[30m$@\033[0m";; 
        *)  echo -e "$@";; 
    
    esac

}



function execute(){ color -red ">> $@"; eval "$@"; }

#寫入日志
function log(){
    local file="$1"
    local text="$2"
    if [ -n "$text" ]; then
        text=$file
        file='debug'
    fi
    echo -e "$text" >> /tmp/"$file.log";
}




# 打印參數列表
function args(){

    local index=1
    for arg in "$@"; do
        echo "arg${index}: '$arg'"
        let index+=1
    done

}



### 系統管理 ###
function -system(){

    local cmd="$1"
    local option="$2"

    case "$cmd" in
        'system-update') execute 'sudo update-manager -d';;
        'ps')   execute 'ps -ef | grep' $option
                execute 'sudo netstat -nltp | grep' $option
        ;;
        'change-shell')  sudo dpkg-reconfigure dash;;

        *)          echo "未知命令"
        ;;
    esac

}


function service(){

    alias service=`which $FUNCNAME`

    local cmd="$1"
    local option="$2"

    case "$cmd" in
        'pkill') execute "sudo pkill -9 $option" ;;
        'nginx')     
                if [ "$option" = 'start' ];then
                    execute "sudo nginx"

                elif [ "$option" = 'restart' ];then
                    execute "sudo nginx -s stop && sudo nginx"

                else
                    execute "sudo nginx -s $option"
                fi
        ;;


        'php' | 'php-fpm')
                case "$option" in
                    'start')  execute "sudo php-fpm";;
                    'stop')   execute "sudo pkill -9 php-fpm";;
                    'restart')  execute "sudo pkill -9 php-fpm && sudo php-fpm";;
                esac
        ;;

        *) 
            eval sudo service "$@"
        ;;

    esac

    unalias $FUNCNAME

}


### 打開文件或目錄 ###
function open(){

    option="$1"
    param="$2"
    
    if [ -z "$option" ];then  option=$PWD; fi

    if [ "$option" == "-conf" ];then

        case "$param" in
            'hosts')    execute "code /etc/hosts" ;;
            'php')      execute "code $PHP/lib/php.ini";;
            'php-fpm')  execute "code $PHP/etc/php-fpm.conf" ;;
            'nginx')    execute "code /usr/local/nginx/conf/nginx.conf" ;;
        esac

    else
        
        mime=`file --mime-type $option | awk '{print $2}'`
        
        #如果是符號鏈接
        if [ $mime == 'inode/symlink' ];then

            option=`readlink -e $option`
            mime=`file --mime-type $option | awk '{print $2}'`
        
        fi
    
        if [ -n "`echo $mime | grep -E '^(text/|inode/x-empty)'`" ];then

            code $option

        elif [ "$mime" = 'inode/directory' ];then
            nautilus $option

        elif [ "$mime" != 'cannot' ]; then
            #默認方式打開
            xdg-open $option
        else
            color -green "新建文件: $option"
            code $option
        fi

    fi

   
}



function show(){

    local name="$1"
    local option="$2"

    #默認為 system 內容
    if [ -z "$option" ];then
        option=$name
        name="system"
    fi

    if [ "$name" == "system" ];then

        case "$option" in
            '-version')
                execute 'lsb_release -a'
            ;;

            '-zombie')
                execute "ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]'"
            ;;
            "-status")
                execute 'sudo systemctl status'
            ;;
            *)
                execute 'lsb_release -a'
            ;;
        esac

    else

        case "$option" in
            '-version')
                execute $name '--version' || execute $name '-v' || execute $name '-V' || execute $name '-version' || execute $name ;;
            *)
                execute $name '--help' || execute $name '-h' || execute $name '-?'  || execute $name '-help' || execute $name ;;
        esac


    fi

}


function where(){

    local name="$1"
    color -red "當前命令:" && which $name
    color -red "命令列表:" && type -a $name
    color -red "相關目錄:" && whereis $name

}


function questions(){

    local question="$1"
    case "$question" in

        'settings')
            #系統設置打不開
            sudo apt-get install gnome-control-center
            #設置里只有很少的幾個圖標
            sudo apt-get install unity-control-center
        ;;


    esac

    #open /etc/xdg/user-dirs.defaults
    #open ~/.config/user-dirs.dirs


}


#批量運行服務
#start "redis-server" 100 105 .conf
function start(){
    
    local server=$1
    local start=$2
    local stop=$3
    local ext=$4
  
    if [ -z "$ext" ];then  local ext=".conf"; fi
    if [ -z "$stop" ];then local stop=$start; fi

    while(( $start <= $stop ))
    do
        execute "$server $start$ext"
        let "start++"
    done

}

function install(){

    software=$1
    ext=${software##*.}

    if [ "$ext" == "deb" ];then
        execute 'sudo dpkg -i' $software
    else
        execute 'sudo apt install -y' $software
    fi

}


function get-install(){

    software=$1

    cd $PACKAGE
    case "$software" in

        '-h' | '-help' | '--help')
            echo "安裝列表:docker docker-compose redis lua zookeeper"
        ;;
        '-init' | '--init')
            sudo apt install net-tools tcl-tls gcc curl && \
            sudo apt-get install libpcre3 libpcre3-dev && \
            sudo apt-get install zlib1g-dev && \
            sudo apt-get install apt-transport-https  ca-certificates  gnupg-agent software-properties-common
        ;;

        'docker')

            sudo apt-get install docker docker-engine docker.io containerd runc && \
            sudo usermod -aG docker $USER && \
            docker --version
        ;;

        'docker-compose')
            sudo curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && \
            sudo chmod +x /usr/local/bin/docker-compose && \
            docker-compose --version
        ;;

        'redis')
            local package='redis-6.0.0.tar.gz'
            sudo wget "http://download.redis.io/releases/${package}" && \
            tar -xvf $package && \
            trash $package && \
            cd $(echo $package | cut -d . -f1)* && \
            make BUILD_TLS=yes && \
            sudo make PREFIX=$PROGRAM/redis install
        ;;

        'lua')
            local package='lua-5.4.0.tar.gz'
            curl -R -O http://www.lua.org/ftp/${package} && \
            tar -xvf $package && \
            trash $package && \
            cd $(echo $package | cut -d . -f1)* && \
            make all test
        ;;

        'mysql')

            sudo apt update && \
            sudo apt install mysql-server && \
            sudo systemctl status mysql && \
            sudo mysql_secure_installation && \
            sudo mysql
            #ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'very_strong_password';
            #GRANT ALL PRIVILEGES ON *.* TO 'administrator'@'localhost' IDENTIFIED BY 'very_strong_password';
        ;;

        "zookeeper")

            local package='apache-zookeeper-3.6.2-bin.tar.gz'
            curl -R -O https://mirrors.bfsu.edu.cn/apache/zookeeper/zookeeper-3.6.2/${package} && \
            tar -xvf $package && \
            trash $package && \
            cd $(echo $package | cut -d . -f1)*

        ;;

        *) color -red "沒有安裝步驟" ;;

    esac

    

}



function docker(){

    #獲取系統中的命令位置賦值給一個別名,后面調用這個別名,就是系統調用,$FUNCNAME 是當前函數名
    alias docker=`which $FUNCNAME`

    local cmd="$1"
    local param="$2"

    case "$cmd" in

        'stop')
            if [ -z "$param" ];then
                param='$(docker ps -q)'
            fi
            execute "docker stop" "$param" ;;

        'start')
            if [ -z "$param" ];then
                param='$(docker container ls -aq)'
            fi
            execute "docker container start" "$param" ;;

        'pid') 
            if [ -z "$param" ];then
                param='$(docker container ls -q)'
            fi
            execute "docker inspect --format '{{.Name}}: {{ .State.Pid }}'" "$param" ;;

        'ip')
            if [ -z "$param" ];then
                param='$(docker container ls -q)'
            fi
            execute "docker inspect --format='{{.Name}}: {{ .NetworkSettings.IPAddress }}'" "$param" ;;

        'rm')
            if [ "$param" == 'all' ];then
                param='$(docker container ls -aq)'
            fi
            execute "docker container rm -f" "$param" ;;

        'image-clear')
                execute 'docker image rm' '$(docker image ls -f "dangling=true" -q)' ;;

        'exec')
            execute "docker container exec -it $param /bin/bash" ;;

        'evn')
            execute "docker run $param env" ;;
        *)  
            #調用系統命令
            eval docker "$@"
        ;;

    esac
    #再把別名給干掉
    unalias $FUNCNAME
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM