linux带环境变量执行,【Linux】 环境变量与shell配置&执行

■  变量与环境变量linux

shell环境一般存在不少变量,变量能够经过echo $VAR或${VAR}的方式查看。set命令能够查看当前环境中的全部变量(包括通常的自定义变量和环境变量)shell

变量的设置经过简单的赋值命令进行。好比TESTVAR=abc,就是设置了TESTVAR的值为abc(注意等号两边都没有空格,值也不能有空格,有空格就要用引号引发来)。centos

取消变量的设置能够经过unset命令,如unset TESTVAR。bash

变量中有一些特殊的变量被称为环境变量。环境变量的意义在于它能够被子进程继承,继而被多个进程共用。因为linux的子进程生成机制是fork-and-exec,因此子进程的环境变量实际上是父进程的一个副本,子进程开始运行后就与父进程互相独立了。经过export命令能够将通常的自定义变量转化为环境变量用于进程间通信。env命令能够查看全部环境变量。ssh

■  shell配置文件与环境变量继承

经过SSH链接centos是一个常见的场景。登陆时,由sshd进程打开一个虚拟终端的子进程,再由虚拟终端进程打开一个bash子进程,这个bash进程就是咱们经过这个链接运行全部指令的原点。接口

顺带一提,打开bash时会有欢迎信息,这些信息配置在/etc/issue(经过终端登陆时)和/etc/motd(经过模拟终端登陆时)。进程

在正式看bash的配置文件以前,有必要先了解一下login-shell和non-login-shell。从最表象的层面来讲,打开bash时须要输入帐号密码的shell就是login-shell,反之则不是。前者例子有经过终端登陆linux系统或者SSH远程登陆模拟终端时,后者的例子有经过图形化界面打开终端,或者在终端中运行bash再开一个子进程的shell等状况。内存

在cenots下打开一个bash的shell时,会读取一些配置文件,加载一些基本的,经常使用的变量到shell中来。一般会涉及到的配置文件主要有四个:同步

A. /etc/profile

B. ~/.bash_profile

C. ~/.bashrc

D. /etc/bashrc

一般,打开的是一个login-shell的时候会加载的配置文件是A和B。(说B是只有一个.bash_profile其实也是不太严谨的。若是home中.bash_profile不存在则会寻找.bash_login,若它也不存在则寻找.profile。三者按照优先级顺序找到一个就加载,其余的就无论了)可是一般,B的具体执行内容中有加载C的步骤,而C的执行内容中又有加载D的步骤,因此通常而言四个都会被加载。因为B和C是每一个用户home目录下自身的文件,可能有所不一样,这点也须要注意。相对的A是全部用户共用的文件。

若打开的是一个non-login-shell的话,那么只会加载C和D。值得一提的是,D这个文件是redhat系统特有的文件,在其中作出了redhat标志性的一些配置(好比PS1的样式)。C这个文件在/etc/skel中有备份,若是不当心删除了能够去那里拿一份回来。

除了上面四个外,还有一些配置文件也和bash的运行息息相关。

~/.bash_history  记录了当前bash的命令执行历史,其大小和环境变量HISTSIZE相关。history命令就是读取这个文件的。历史命令并不会随着咱们操做同步写入,咱们能够想象是这样的:登陆时读取这个文件把HISTSIZE条命令加载到内存中,因为HISTSIZE一般是1000,以1000举例。而后随着咱们不断输入命令,内存中这1000条不断被更新,总量始终维持在1000。当咱们注销登陆时将这更新后的1000条再次写入此文件。因为命令记录和bash进程相关联,可是.bash_history一个用户只有一个,因此当同一个用户用不一样bash进程作了不一样操做的时候,更新的信息以最后一个注销的用户为准。

~/.bash_logout  注销登陆时留给用户作一些事的接口。咱们能够在里面写上一些注销登陆时要机器自动帮你作的事情,好比记录登出的时间等等。

■  几种运行可执行程序(包括运行sh脚本)的区别

对于可执行文件,Linux提供了多种执行方法,按照分类主要有:

1. 经过路径执行如相对or绝对路径:./test.sh 、/tmp/test.sh

这种执行方法须要当前用户对被执行的文件有执行的权限,且若是是一个shell脚本的话在脚本头应该声明相应的解释器如#!/bin/bash。从执行程序的角度而言经过相对或绝对路径执行没有区别。

因为通常命令的执行本质也是先找到环境变量PATH中的相关路径再执行,因此能够视为这一类执行方式。所以,通常命令的执行也都是开了一个子进程的shell来执行的。

2. shell命令执行

经过shell程序的指令执行如: bash test.sh、sh test.sh

经过这种方法执行的程序自己无需有执行权限,只要有读权限便可。被执行程序做为一个shell程序的参数运行。

3. 以读取环境变量的方式执行

如: source test.sh 、 . test.sh

这种方式和前两种最大的区别在于,前两种都是在现有shell中开启一个子进程的shell,而后把程序放到子进程的shell环境中执行,执行完成后即关闭子进程shell。而这种方式直接在当前shell环境中执行。因此若是被执行程序中含有对环境变量的增改,且但愿保留结果到当前shell环境中的,则须要使用这种方法执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值