[Share Experiences] 各类开发环境的个人使用方案(Web方向)
Tofloor
poster avatar
MarioAi
deepin
2021-03-06 04:24
Author

分享一下个人环境变量的使用

1.添加脚本,导入自定义环境变量

# ~/.bashrc 中添加,注意我的路径
# 自定义环境变量脚本
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "/data/Dev/Pro/start/mario_path" ]; then
	. "/data/Dev/Pro/start/mario_path"
    fi
fi

2.添加相应位置的工具包

3.自定义环境变量内容(先看文件地址)

# mario_path 内容,基本上都是类似的样式

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# **************************
# **************************
# **
# **  自定义环境变量程序
# **  添加本文件到 ~/.bashrc
# **************************
# **************************


# 我的开发环境地址
DEV_HOME=/data
# Java环境变量添加
# JDK版本: Alibaba Dragonwell 8.5.5-GA Linux x64
# 绝对地址: /media/mario/数据/Dev/Pro/alibaba-dragonwell
# 相对地址: ~/Dev/Pro/jdk8u262-b10
# 本变量仅适用于mario账户之下,作为Java开发环境 或其他Java通用型环境使用,下面脚本开始
JAVA_HOME=$DEV_HOME/Dev/Pro/alibaba-dragonwell
if [ -d "$JAVA_HOME/bin" ]
then
    # Java目录验证正常,添加目录
    PATH="$JAVA_HOME/bin:$PATH"
else
    # Java目录查找失败,报错
    echo 'There has no JAVA_HOME path , can not add for PATH ' 
fi
# JRE_HOME
JRE_HOME=$DEV_HOME/Dev/Pro/alibaba-dragonwell/jre
if [ -d "$JRE_HOME/bin" ]
then
    # Java目录验证正常,添加目录
    PATH="$JRE_HOME/bin:$PATH"
else
    # Java目录查找失败,报错
    echo 'There has no JRE_HOME path , can not add for PATH ' 
fi

# Tomcat环境变量添加
# Tomcat版本:Apache Tomcat 9.0.37
# 绝对地址:/home/mario/Dev/Pro/apache-tomcat
# 相对地址:~/Dev/Pro/apache-tomcat-9.0.37
# 本变量本变量仅适用于mario账户之下,作为JavaEE开发的部署 或其他相关部署环境使用,下面脚本开始
CATALINA_HOME=$DEV_HOME/Dev/Pro/apache-tomcat
if [ -d "$JAVA_HOME/bin" ]
then
    # 验证JAVA_HOME是否正常
    if [ -d "$CATALINA_HOME/bin" ]
    then
        # 验证Tomcat目录是否正常
        PATH="$CATALINA_HOME/bin:$PATH"
    else
        # Tomcat目录异常
        echo 'There has no CATALINA_HOME path , can not add for PATH ' 
    fi
else
    # JAVA_HOME异常
    echo 'Can not add CATALINA_HOME without JAVA_HOME ' 
fi

# maven环境变量添加
# maven版本:Apache Maven 3.6.3 
# 绝对地址:/home/mario/Dev/Pro/apache-maven
# 相对地址:~/Dev/Pro/apache-maven
# 本变量本变量仅适用于mario账户之下,作为JavaEE开发的部署 或其他相关部署环境使用,下面脚本开始
MAVEN_HOME=$DEV_HOME/Dev/Pro/apache-maven
if [ -d "$JAVA_HOME/bin" ]
then
    # 验证JAVA_HOME是否正常
    if [ -d "$MAVEN_HOME/bin" ]
    then
        # 验证Tomcat目录是否正常
        PATH="$MAVEN_HOME/bin:$PATH"
    else
        # Tomcat目录异常
        echo 'There has no MAVEN_HOME path , can not add for PATH ' 
    fi
else
    # JAVA_HOME异常
    echo 'Can not add MAVEN_HOME without JAVA_HOME ' 
fi

# MySQL环境变量添加
# MySQL版本:
# 绝对地址:@/Dev/Pro/mysql-8.0.23-linux-glibc2.12-x86_64
# 相对地址:~/Dev/Pro/apache-maven
# 本变量本变量仅适用于mario账户之下,作为JavaEE开发的部署 或其他相关部署环境使用,下面脚本开始
MYSQL_HOME=$DEV_HOME/Dev/Pro/mysql-8.0.23-linux-glibc2.12-x86_64
if [ -d "$MYSQL_HOME/bin" ]
then
#    # 验证Tomcat目录是否正常
    PATH="$MYSQL_HOME/bin:$PATH"
else
#    # Tomcat目录异常
    echo 'There has no MYSQL_HOME path , can not add for PATH ' 
fi

# Redis环境变量添加
# Redis版本:
# 绝对地址:@/Dev/Pro/redis-6.0.10
# 相对地址:~/Dev/Pro/redis-6.0.10
# 本变量本变量仅适用于mario账户之下,作为JavaEE开发的部署 或其他相关部署环境使用,下面脚本开始
#REDIS_HOME=$DEV_HOME/Dev/Pro/redis-6.0.10
#if [ -d "$REDIS_HOME/src" ]
#then
#    # 验证Tomcat目录是否正常
#    PATH="$REDIS_HOME/src:$PATH"
#else
#    # Tomcat目录异常
#    echo 'There has no REDIS_HOME path , can not add for PATH ' 
#fi

# IDEA环境变量添加
# Tomcat版本:idea IU 202.6397.94
# 绝对地址:/home/mario/Dev/Pro/idea-IU
# 相对地址:~/Dev/Pro/idea-IU-202.6397.94
# 本变量本变量仅适用于mario账户之下,作为JavaEE开发的部署 或其他相关部署环境使用,下面脚本开始
#IDEA_HOME=$DEV_HOME/Dev/Pro/idea-IU
#if [ -d "$JAVA_HOME/bin" ]
#then
#    # 验证JAVA_HOME是否正常
#    if [ -d "$IDEA_HOME/bin" ]
#    then
#        # 验证Tomcat目录是否正常
#        PATH="$IDEA_HOME/bin:$PATH"
#    else
#        # Tomcat目录异常
#        echo 'There has no IDEA_HOME path , can not add for PATH ' 
#    fi
#else
#    # JAVA_HOME异常
#    echo 'Can not add IDEA_HOME without JAVA_HOME ' 
#fi

# android-sdk-platform-tools环境变量添加
# ADB版本: platform-tools_r30.0.5 Linux x64
# 绝对地址: /home/mario/Dev/mine/android-sdk-platform-tools
# 相对地址: ~/Dev/mine/android-sdk-platform-tools
# 本变量仅适用于mario账户之下,作为安卓开发调试环境 或其他ADB通用型环境使用,下面脚本开始
ADB_HOME=$DEV_HOME/Dev/mine/android-sdk-platform-tools
if [ -d "$ADB_HOME" ]
then
    # ADB目录验证正常,添加目录
    PATH="$ADB_HOME:$PATH"
else
    # ADB目录查找失败,报错
    echo 'There has no ADB_HOME path , can not add for PATH ' 
fi

# Node/NPM 环境变量添加
# Node版本: node-v15.5.1-linux-x64
# 绝对地址: /home/mario/Dev/Pro/node-v15.5.1-linux-x64
# 相对地址: ~/Dev/Pro/node-v15.5.1-linux-x64
# 本变量仅适用于mario账户之下,作为前端开发调试环境,下面脚本开始
NODE_HOME=$DEV_HOME/Dev/Pro/node-linux-x64
if [ -d "$NODE_HOME" ]
then
    # Node目录验证正常,添加目录
    PATH="$NODE_HOME/bin:$PATH"
else
    # Node目录查找失败,报错
    echo 'There has no NODE_HOME path , can not add for PATH ' 
fi

# Git 环境变量添加
# Git版本: git-2.30.0
# 绝对地址: /media/mario/数据/Dev/Pro/git
# 相对地址: ~/Dev/Pro/git
# 本变量仅适用于mario账户之下,作为开发调试的代码托管管理 或其他Git通用型仓库环境使用,下面脚本开始
GIT_HOME=$DEV_HOME/Dev/Pro/git
if [ -d "$GIT_HOME" ]
then
    # ADB目录验证正常,添加目录
    PATH="$GIT_HOME:$PATH"
#else
    # GIT目录查找失败,报错
    #echo 'There has no GIT_HOME path , can not add for PATH ' 
fi


# Deepin-Wine5 环境变量添加
# Deepin-Wine版本: wine-5.0
# 绝对地址: /home/mario/.deepinwine/deepin-wine5-stable
# 相对地址: ~/.deepinwine/deepin-wine5-stable
# 本变量仅适用于mario账户之下,作为Wine调试环境,下面脚本开始
WINE_HOME=$HOME/.deepinwine/deepin-wine5-stable
if [ -d "$WINE_HOME" ]
then
    # Deepin-Wine目录验证正常,添加目录
    PATH="$WINE_HOME/bin:$PATH"
#else
    # Deepin-Wine目录查找失败,报错
    # echo 'There has no WINE_HOME path , can not add for PATH ' 
fi


# 启动环境
# mysql redis
# 绝对地址: /data/Dev/Pro/start
# 相对地址: ./Dev/Pro/start
# 本变量仅适用于mario账户之下,作为Wine调试环境,下面脚本开始
INIT_HOME=$DEV_HOME/Dev/Pro/start
if [ -d "$INIT_HOME" ]
then
    # Node目录验证正常,添加目录
    PATH="$INIT_HOME/:$PATH"
else
    # Node目录查找失败,报错
    echo 'There has no INIT_HOME path , can not add for PATH ' 
fi

# 修改默认 python
# alias python='python3'

3.mysql 和 redis 得手动启动,上面最后一个环境地址的设置目的

    # mario 文件的内容,目的是快捷启动mysql 和 redis 服务,同目录下的那两个 init 文件

#!/bin/bash
# **************************
# **************************
# **
# **  自定义环境初始化程序
# **
# **************************
# **************************
# 环境设置
MY_DIR=/data/Dev/Pro/start

#判断
#if [ -n $1 ]
#then
#    if [[ $1=="start" ]] | [[ $1=="stop" ]]
#    then
#        echo $1
#    else
#        echo "使用 ‘start|stop’ 启动和停止"
#    fi
# fi

# 启动
if [ -d $MY_DIR ]   
then   
        # 启动 MySQL
        if [ -d $MY_DIR ]   
        then 
            echo "MySQL 服务启动中..." 
            sudo $MY_DIR/mysql_init start
        else
            echo 'MySQL 未找到启动服务'
        fi
        # 启动 Redis
        if [ -d $MY_DIR ]   
        then 
            echo "Redis 服务启动中..." 
            sudo $MY_DIR/redis_init start
        else
            echo 'Redis 未找到启动服务'
        fi
else  
        echo "环境目录不存在,请检查配置..."   
fi     

mysql_init (mysql.server) 

#!/bin/sh
# Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
# This file is public domain and comes with NO WARRANTY of any kind

# MySQL daemon start/stop script.

# Usually this is put in /etc/init.d (at least on machines SYSV R4 based
# systems) and linked to /etc/rc3.d/S99mysql and /etc/rc0.d/K01mysql.
# When this is done the mysql server will be started when the machine is
# started and shut down when the systems goes down.

# Comments to support chkconfig on RedHat Linux
# chkconfig: 2345 64 36
# description: A very fast and reliable SQL database engine.

# Comments to support LSB init script conventions
### BEGIN INIT INFO
# Provides: mysql
# Required-Start: $local_fs $network $remote_fs
# Should-Start: ypbind nscd ldap ntpd xntpd
# Required-Stop: $local_fs $network $remote_fs
# Default-Start:  2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start and stop MySQL
# Description: MySQL is a very fast and reliable SQL database engine.
### END INIT INFO
 
# If you install MySQL on some other places than /usr/local/mysql, then you
# have to do one of the following things for this script to work:
#
# - Run this script from within the MySQL installation directory
# - Create a /etc/my.cnf file with the following information:
#   [mysqld]
#   basedir=
# - Add the above to any other configuration file (for example ~/.my.ini)
#   and copy my_print_defaults to /usr/bin
# - Add the path to the mysql-installation-directory to the basedir variable
#   below.
#
# If you want to affect other MySQL variables, you should make your changes
# in the /etc/my.cnf, ~/.my.cnf or other MySQL configuration files.

# If you change base dir, you must also change datadir. These may get
# overwritten by settings in the MySQL configuration files.
# 注意这里,其他不用操心
basedir='/data/Dev/Pro/mysql-8.0.23-linux-glibc2.12-x86_64'
datadir='/data/Dev/Pro/mysql-8.0.23-linux-glibc2.12-x86_64/data'

# Default value, in seconds, afterwhich the script should timeout waiting
# for server start. 
# Value here is overriden by value in my.cnf. 
# 0 means don't wait at all
# Negative numbers mean to wait indefinitely
service_startup_timeout=900

# Lock directory for RedHat / SuSE.
lockdir='/var/lock/subsys'
lock_file_path="$lockdir/mysql"

# The following variables are only set for letting mysql.server find things.

# Set some defaults
mysqld_pid_file_path=
if test -z "$basedir"
then
  basedir=/usr/local/mysql
  bindir=/usr/local/mysql/bin
  if test -z "$datadir"
  then
    datadir=/usr/local/mysql/data
  fi
  sbindir=/usr/local/mysql/bin
  libexecdir=/usr/local/mysql/bin
else
  bindir="$basedir/bin"
  if test -z "$datadir"
  then
    datadir="$basedir/data"
  fi
  sbindir="$basedir/sbin"
  libexecdir="$basedir/libexec"
fi

# datadir_set is used to determine if datadir was set (and so should be
# *not* set inside of the --basedir= handler.)
datadir_set=

#
# Use LSB init script functions for printing messages, if possible
#
lsb_functions="/lib/lsb/init-functions"
if test -f $lsb_functions ; then
  . $lsb_functions
else
  log_success_msg()
  {
    echo " SUCCESS! $@"
  }
  log_failure_msg()
  {
    echo " ERROR! $@"
  }
fi

PATH="/sbin:/usr/sbin:/bin:/usr/bin:$basedir/bin"
export PATH

mode=$1    # start or stop

[ $# -ge 1 ] && shift


other_args="$*"   # uncommon, but needed when called from an RPM upgrade action
           # Expected: "--skip-networking --skip-grant-tables"
           # They are not checked here, intentionally, as it is the resposibility
           # of the "spec" file author to give correct arguments only.

case `echo "testing\c"`,`echo -n testing` in
    *c*,-n*) echo_n=   echo_c=     ;;
    *c*,*)   echo_n=-n echo_c=     ;;
    *)       echo_n=   echo_c='\c' ;;
esac

parse_server_arguments() {
  for arg do
    case "$arg" in
      --basedir=*)  basedir=`echo "$arg" | sed -e 's/^[^=]*=//'`
                    bindir="$basedir/bin"
		    if test -z "$datadir_set"; then
		      datadir="$basedir/data"
		    fi
		    sbindir="$basedir/sbin"
		    libexecdir="$basedir/libexec"
        ;;
      --datadir=*)  datadir=`echo "$arg" | sed -e 's/^[^=]*=//'`
		    datadir_set=1
	;;
      --pid-file=*) mysqld_pid_file_path=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
      --service-startup-timeout=*) service_startup_timeout=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
    esac
  done
}

wait_for_pid () {
  verb="$1"           # created | removed
  pid="$2"            # process ID of the program operating on the pid-file
  pid_file_path="$3" # path to the PID file.

  i=0
  avoid_race_condition="by checking again"

  while test $i -ne $service_startup_timeout ; do

    case "$verb" in
      'created')
        # wait for a PID-file to pop into existence.
        test -s "$pid_file_path" && i='' && break
        ;;
      'removed')
        # wait for this PID-file to disappear
        test ! -s "$pid_file_path" && i='' && break
        ;;
      *)
        echo "wait_for_pid () usage: wait_for_pid created|removed pid pid_file_path"
        exit 1
        ;;
    esac

    # if server isn't running, then pid-file will never be updated
    if test -n "$pid"; then
      if kill -0 "$pid" 2>/dev/null; then
        :  # the server still runs
      else
        # The server may have exited between the last pid-file check and now.  
        if test -n "$avoid_race_condition"; then
          avoid_race_condition=""
          continue  # Check again.
        fi

        # there's nothing that will affect the file.
        log_failure_msg "The server quit without updating PID file ($pid_file_path)."
        return 1  # not waiting any more.
      fi
    fi

    echo $echo_n ".$echo_c"
    i=`expr $i + 1`
    sleep 1

  done

  if test -z "$i" ; then
    log_success_msg
    return 0
  else
    log_failure_msg
    return 1
  fi
}

# Get arguments from the my.cnf file,
# the only group, which is read from now on is [mysqld]
if test -x "$bindir/my_print_defaults";  then
  print_defaults="$bindir/my_print_defaults"
else
  # Try to find basedir in /etc/my.cnf
  conf=/etc/my.cnf
  print_defaults=
  if test -r $conf
  then
    subpat='^[^=]*basedir[^=]*=\(.*\)$'
    dirs=`sed -e "/$subpat/!d" -e 's//\1/' $conf`
    for d in $dirs
    do
      d=`echo $d | sed -e 's/[ 	]//g'`
      if test -x "$d/bin/my_print_defaults"
      then
        print_defaults="$d/bin/my_print_defaults"
        break
      fi
    done
  fi

  # Hope it's in the PATH ... but I doubt it
  test -z "$print_defaults" && print_defaults="my_print_defaults"
fi

#
# Read defaults file from 'basedir'.   If there is no defaults file there
# check if it's in the old (depricated) place (datadir) and read it from there
#

extra_args=""
if test -r "$basedir/my.cnf"
then
  extra_args="-e $basedir/my.cnf"
fi

parse_server_arguments `$print_defaults $extra_args mysqld server mysql_server mysql.server`

#
# Set pid file if not given
#
if test -z "$mysqld_pid_file_path"
then
  mysqld_pid_file_path=$datadir/`hostname`.pid
else
  case "$mysqld_pid_file_path" in
    /* ) ;;
    * )  mysqld_pid_file_path="$datadir/$mysqld_pid_file_path" ;;
  esac
fi

case "$mode" in
  'start')
    # Start daemon

    # Safeguard (relative paths, core dumps..)
    cd $basedir

    echo $echo_n "Starting MySQL"
    if test -x $bindir/mysqld_safe
    then
      # Give extra arguments to mysqld with the my.cnf file. This script
      # may be overwritten at next upgrade.
      $bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null &
      wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?

      # Make lock for RedHat / SuSE
      if test -w "$lockdir"
      then
        touch "$lock_file_path"
      fi

      exit $return_value
    else
      log_failure_msg "Couldn't find MySQL server ($bindir/mysqld_safe)"
    fi
    ;;

  'stop')
    # Stop daemon. We use a signal here to avoid having to know the
    # root password.

    if test -s "$mysqld_pid_file_path"
    then
      # signal mysqld_safe that it needs to stop
      touch "$mysqld_pid_file_path.shutdown"

      mysqld_pid=`cat "$mysqld_pid_file_path"`

      if (kill -0 $mysqld_pid 2>/dev/null)
      then
        echo $echo_n "Shutting down MySQL"
        kill $mysqld_pid
        # mysqld should remove the pid file when it exits, so wait for it.
        wait_for_pid removed "$mysqld_pid" "$mysqld_pid_file_path"; return_value=$?
      else
        log_failure_msg "MySQL server process #$mysqld_pid is not running!"
        rm "$mysqld_pid_file_path"
      fi

      # Delete lock for RedHat / SuSE
      if test -f "$lock_file_path"
      then
        rm -f "$lock_file_path"
      fi
      exit $return_value
    else
      log_failure_msg "MySQL server PID file could not be found!"
    fi
    ;;

  'restart')
    # Stop the service and regardless of whether it was
    # running or not, start it again.
    if $0 stop  $other_args; then
      $0 start $other_args
    else
      log_failure_msg "Failed to stop running server, so refusing to try to start."
      exit 1
    fi
    ;;

  'reload'|'force-reload')
    if test -s "$mysqld_pid_file_path" ; then
      read mysqld_pid <  "$mysqld_pid_file_path"
      kill -HUP $mysqld_pid && log_success_msg "Reloading service MySQL"
      touch "$mysqld_pid_file_path"
    else
      log_failure_msg "MySQL PID file could not be found!"
      exit 1
    fi
    ;;
  'status')
    # First, check to see if pid file exists
    if test -s "$mysqld_pid_file_path" ; then 
      read mysqld_pid < "$mysqld_pid_file_path"
      if kill -0 $mysqld_pid 2>/dev/null ; then 
        log_success_msg "MySQL running ($mysqld_pid)"
        exit 0
      else
        log_failure_msg "MySQL is not running, but PID file exists"
        exit 1
      fi
    else
      # Try to find appropriate mysqld process
      mysqld_pid=`pidof $libexecdir/mysqld`

      # test if multiple pids exist
      pid_count=`echo $mysqld_pid | wc -w`
      if test $pid_count -gt 1 ; then
        log_failure_msg "Multiple MySQL running but PID file could not be found ($mysqld_pid)"
        exit 5
      elif test -z $mysqld_pid ; then 
        if test -f "$lock_file_path" ; then 
          log_failure_msg "MySQL is not running, but lock file ($lock_file_path) exists"
          exit 2
        fi 
        log_failure_msg "MySQL is not running"
        exit 3
      else
        log_failure_msg "MySQL is running but PID file could not be found"
        exit 4
      fi
    fi
    ;;
    *)
      # usage
      basename=`basename "$0"`
      echo "Usage: $basename  {start|stop|restart|reload|force-reload|status}  [ MySQL server options ]"
      exit 1
    ;;
esac

exit 0

redis_init (redis.server)

#!/bin/bash
#
# chkconfig: 2345 10 90  
# description: Start and Stop redis   
PATH=/usr/local/bin:/sbin:/usr/bin:/bin   
REDISPORT=6379  
# 这个是注意这里
EXEC=/data/Dev/Pro/redis-6.0.10/src/redis-server   
REDIS_CLI=/data/Dev/Pro/redis-6.0.10/src/redis-cli   
# 尤其是这个
PIDFILE=/var/run/redis_6379.pid   
CONF="/data/Dev/Pro/redis-6.0.10/redis.conf"  
AUTH="1234"  
case "$1" in   
        start)   
                if [ -f $PIDFILE ]   
                then   
                        echo "$PIDFILE exists, process is already running or crashed."  
                else  
                        echo "Starting Redis server..."  
                        $EXEC $CONF   
                fi   
                if [ "$?"="0" ]   
                then   
                        echo "Redis is running..."  
                fi   
                ;;   
        stop)   
                if [ ! -f $PIDFILE ]   
                then   
                        echo "$PIDFILE exists, process is not running."  
                else  
                        PID=$(cat $PIDFILE)   
                        echo "Stopping..."  
                       $REDIS_CLI -p $REDISPORT  SHUTDOWN    
                        sleep 2  
                       while [ -x $PIDFILE ]   
                       do  
                                echo "Waiting for Redis to shutdown..."  
                               sleep 1  
                        done   
                        echo "Redis stopped"  
                fi   
                ;;   
        restart|force-reload)   
                ${0} stop   
                ${0} start   
                ;;   
        *)   
               echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2  
                exit 1  
esac

 

5.结尾,上面大概都是都是关于环境变量的,各位如果哪个不知道如何配置,或者哪里有问题 又或者更好的有什么好的建议,我大都会回复

Reply Favorite View the author
All Replies
neko
deepin
Ecological co-builder
Q&A Team
2021-03-06 04:35
#1

P=~/Documents/env;for i in $(ls $P);do source $P/$i;done

我一般直接把环境变量到脚本丢到env目录里让.bashrc自己source

Reply View the author