当前位置: 澳门新濠3559 > 操作系统 > 正文

使用set命令显示所有本地定义的Shell变量,子sh

时间:2019-12-26 00:20来源:操作系统
Windows下查看修改环境变量PATH 右击"此电脑",点击"属性",左侧选择"高级系统设置",如下图   选择“高级”,再点击“环境变量”,就会如下图所示 上部分是当前用户的环境变量,下

Windows下查看修改环境变量PATH

右击"此电脑",点击"属性",左侧选择"高级系统设置",如下图

 图片 1

选择“高级”,再点击“环境变量”,就会如下图所示

图片 2

上部分是当前用户的环境变量,下部分是系统的环境变量,适用所有用户,一般而言,修改PATH都是更改系统变量。

点击“新建”,设置变量名和变量值后即可新建环境变量。(如下图)

图片 3

点击“编辑”,在新窗口右侧可以新建、编辑、浏览、删除变量值,上移或下移可以改变各变量值的顺序。(如下图)

图片 4

同样、点击“删除”可删除选中的环境变量。

 

#! /bin/sh

#echo $0 文件名
#echo $1 第一个参数
#echo "$*" 所有参数列表
#echo "$@" 所有参数列表

#myname="lisalian" 定义变量
#echo $myname  输出变量
#echo ${myname} 输出变量
# ------------------上面是基本的用法-------------------------------

PROJECT_PATH="/data/web/"
is_work=1
# 判断是否有两个参数: 项目名:启动端口
if [ $# != "2" ]
then
    echo "usage: $0 <project_name> <runport>"
    is_work=0
fi

# 定义一个函数
run_temp_server(){
    project_name=$1 # 传到函数的第一个参数 $0依然是文件名
    runport=$2 # 第二个参数 端口
    project_dir="$PROJECT_PATH$project_name/" # 拼接字符串
    # 检查项目文件夹是否存在
    if [ ! -d $project_dir ]
    then
        echo "no such file or directory: $project_dir"
    # 存在则执行下面命令
    else
        # 像在终端一样使用这些shell 命令
        deactiavte
        source `which virtualenvwrapper.sh`
        cd $project_dir
        workon $project_name
        python manage.py runserver 0.0.0.0:$runport
    fi
}

if [ $is_work -eq "1" ]
then
    # 执行函数 并且传入参数
    run_temp_server  $1 $2
fi

查看PATH:echo $PATH

Linux下查看添加PATH环境变量 

$PATH:环境变量、格式为:

  PATH=$PATH:<PATH 1>:<PATH 2>:<PATH 3>:------:<PATH N>

各路径之间中间用冒号隔开,更改后,在用户下次登陆时生效。

如果想立刻生效,则可执行source命令。

查看PATH值的命令:

  $ export

查看PATH环境变量的命令:

  $ echo $PATH

添加PATH环境变量的命令:

  $ export PATH= <路径> :$PATH

但是这个方法添加的环境变量是暂时的,在终端关闭后就会失效。

如果要长期保存PATH变量,可以修改 /etc/profile 来更改(需要root权限,为全用户修改)

  # vim /etc/profile

也可以改家目录下的.bashrc 文件(不要root权限,为个人用户更改)

  $ vim ~/.bashrc

打开文档后,在最后添加一行:

  export PATH="<路径>:$PATH"

保存,退出,然后运行:

  source /etc/profile

  source ~/.bashrc

环境变量修改完毕

 

执行命令

使用env命令显示所有的环境变量: $ env

[~/shell]$ . ./runserver.sh owan_web 9006

使用set命令显示所有本地定义的Shell变量: $ set

这里可以看到执行的方式 . ./runserver 而不是直接./runserver
原因是:
使用set命令显示所有本地定义的Shell变量,子shell 有它自己的变量。shell 运行的这个runserver脚本是一个子shell , 子shell 有它自己的变量, 在子shell里面是cd 成功了, 但是随着子shell 结束, 就回到了父shell。

使用unset命令来清除环境变量

Linux Source命令及脚本的执行方式解析

执行脚本一般用sh来执行该脚本或者./脚本名。
但有时候我们并不想修改文件权限,可能我们也没有那个权限,所以我们可以使用.(点号)+文件名来临时执行一个脚本而无须修改权限。

source(或点)命令通常用于重新执行刚修改的初始化文档,如 .bash_profile 和 .profile 等等。例如,假如在登录后,对.bash_profile中的 EDITER 和 TERM 变量做了修改,则能够用source命令重新执行.bash_profile中的命令而不用注销并重新登录。
source命令的作用就是用来执行一个脚本,
那么:source a.sh 同直接执行 ./a.sh 有什么不同呢:

  • 1.当shell脚本具有可执行权限时,用sh filename与./filename执行脚本是没有区别得。./filename是因为当前目录没有在PATH中,所有"."是用来表示当前目录的。
  • 2.sh filename 重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell,除非使用export。
  • 3.source filename:这个命令其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面。

总结就是: source 脚本是不会创建子shell , 直接在当前的shell执行脚本, 而且不需要脚本有x可执行权限。

set可以设置某个环境变量的值。清除环境变量的值用unset命令。如果未指定值,则该变量值将被设为NULL。示例如下:

export 作用 和 source的作用比较

export 是将变量换成环境变量的用法
source 是把脚本放在当前shell执行

如果a.sh 里面是定义了

WEB_PATH='/data/web' 

如果我们执行source ./a.sh 那么会在当前环境生成一个变量WEB_PATH 我们echo $WEB_PATH也是可以获取的。
但是这个$WEB_PATH变量不是环境变量,只是普通变量。
环境变量的作用是什么?
环境变量是当父shell创建子shell的时候,会完整复制一份给子shell的变量。所以当我们执行脚本的时候,这个脚本默认会获取父shell所有环境变量(export得到的变量)
我们修改以下a.sh

WEB_PATH='/data/web' 
export WEB

执行

./a.sh

这样执行不能echo 的时候不会有任何内容,因为这个子shell 的变量已经销毁了。哪怕它用export。
要这样执行
source a.sh
才能让它变成真正的环境变量

出的结论是:
1、执行脚本时是在一个子shell环境运行的,脚本执行完后该子shell自动退出;
2、一个shell中的系统环境变量才会被复制到子 shell中(用export定义的变量);
3、一个shell中的系统环境变量只对该shell或者它的子shell有效,该shell结束时变量消失 (并不能返回到父shell中)。
4、不用export定义的变量只对该shell有效,对子shell也是无效的。

$ export TEST="Test..." #增加一个环境变量TEST

Linux 环境变量设置

写完脚本后把脚本的路径加入$PATH 可以全局使用这个命令

vim ~/.zshrc
# 在这里面加入下面这句,就能把当前脚本目录加入$PATH
export PATH=/home/lidongwei/shell/:$PATH

这里就说明一些Linux下设置环境变量有三种方法:

  • 一种用于当前终端
  • 一种用于当前用户
  • 一种用于所有用户

一:用于当前终端:
在当前终端中输入:export PATH=$PATH:<你的要加入的路径>
不过上面的方法只适用于当前终端,一旦当前终端关闭或在另一个终端中,则无效。
export NDK_ROOT=/home/jiang/soft/Android-ndk-r8e #只能在当前终端使用。

二:用于当前用户:
在用户主目录下有一个 .bashrc 隐藏文件,可以在此文件中加入 PATH 的设置如下:
$ vim ~/.bashrc 我用on-my-zsh 所以是用 vim ~/.zshrc

加入:
export PATH=<你的要加入的路径>:$PATH
如果要加入多个路径,只要:
export PATH=<你要加入的路径1>:<你要加入的路径2>: ...... :$PATH
当中每个路径要以冒号分隔。
这样每次登录都会生效
添加PYTHONPATH的方法也是这样,在.bashrc中添加
export PYTHONPATH=/home/zhao/setup/caffe-master/python:/home/zhao/setup/mypy:$PYTHONPATH
保存后在终端输入 $ source ~/.bashrc 使环境变量立即生效

三:用于所有用户:
$ sudo vim /etc/profile

加入:
export PATH=<你要加入的路径>:$PATH
就可以了。
终端输入:echo $PATH 可以查看环境变量

注意,修改环境变量后,除了第一种方法立即生效外,第二第三种方法要立即生效,可以source ~/.bashrc或者注销再次登录后就可以了!

$ env|grep TEST #此命令有输入,证明环境变量TEST已经存在了

参考

LINUX Shell脚本中点号和source命令
linux export 的作用

TEST=Test...

$ unset $TEST #删除环境变量TEST

$ env|grep TEST #此命令没有输出,证明环境变量TEST已经存在了

 

以添加mongodb server为列
修改方法一:
export PATH=/usr/local/mongodb/bin:$PATH
//配置完后可以通过echo $PATH查看配置结果。
生效方法:立即生效
有效期限:临时改变,只能在当前的终端窗口中有效,当前窗口关闭后就会恢复原有的path配置
用户局限:仅对当前用户

 

修改方法二:
通过修改.bashrc文件:
vim ~/.bashrc 
//在最后一行添上:
export PATH=/usr/local/mongodb/bin:$PATH
生效方法:(有以下两种)
1、关闭当前终端窗口,重新打开一个新终端窗口就能生效
2、输入“source ~/.bashrc”命令,立即生效
有效期限:永久有效
用户局限:仅对当前用户

 

修改方法三:
通过修改profile文件:
vim /etc/profile
/export PATH //找到设置PATH的行,添加
export PATH=/usr/local/mongodb/bin:$PATH
生效方法:

1.系统重启

2.要想马上生效还要运行# source /etc/profile不然只能在下次重进此用户时生效。

有效期限:永久有效
用户局限:对所有用户

 

修改方法四:
通过修改environment文件:
vim /etc/environment
在PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"中加入“:/usr/local/mongodb/bin”
生效方法:系统重启
有效期限:永久有效
用户局限:对所有用户

 

常用的环境变量

  PATH 决定了shell将到哪些目录中寻找命令或程序

  HOME 当前用户主目录

  HISTSIZE 历史记录数

  LOGNAME 当前用户的登录名

  HOSTNAME 指主机的名称

  SHELL   当前用户Shell类型

  LANGUGE  语言相关的环境变量,多语言可以修改此环境变量

  MAIL   当前用户的邮件存放目录

  PS1   基本提示符,对于root用户是#,对于普通用户是$

编辑:操作系统 本文来源:使用set命令显示所有本地定义的Shell变量,子sh

关键词: