环境变量简介
环境变量简介
环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。
环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性。
也就是简单的说是:
常见环境变量:
PATH : 指定命令的搜索路径。 HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)。 SHELL : 当前Shell,它的值通常是/bin/bash。
查看环境变量方法:
echo $AME //AME:你的环境变量名称。
下面我们来讲一下命令行参数:
也就是main函数是有参数的:
argc根据我们在可执行程序后面的参数个数推断,ar数组内放的字符串就是我们命令行所给的参数组成的数组:如ls -al :可以理解成ls是一个把main函数编译好的可执行程序,而后面的-al就是命令行参数;下面用一个例子演示一下:
这样一展示的话,我们就明白了那些指令原来是这么设计的吧。
那问题来了,我们怎么知道这个程序在哪,然后再去main函数里面对应的执行相应命令行参数对应的功能呢? 根据所学的,我们可以明白命令行是bash控制的,那么也就是bash去。
去哪:就是环境变量PATH的应用了。
这样就和我们的环境变量联系在一起了。
那么PATH是怎样操作:
下面可能会有个疑问:
为什么此时要加入./才能运行, 因为此时生成的可执行文件在当前目录,而没有在PATH中,不告诉它就会默认到这里面,会不到,因此这样写如果非要让成立可以把当前路径加在PATH后面:也就是PATH=$PATH:当前路径。但是如果退出来再重新登录就会消失,后面会讲解怎么样才可以导入并且不消失。
等后面我们就用可以获得环境变量的environ把这张表打印出来当然也可以用env后面会讲到。
这里我们只需要了解bash是如何操作我们命令行输入的命令的就可。
这里我们讲一个小插点:
我们上面不是讲了PATH的覆盖;如果我们直接把它覆盖而不是后面的“拼接”;也就是直接PATH=当前路径;那么此时我们会发现一些指令如ls等都不能用了;而export,cd等却可以这是为啥?
因为我们比如执行的刚刚的等程序,是通过子进程调用完成的,而我们之前学过,子进程默认虽然是和父进程一样数据等,但是会发生写实拷贝:当我们覆盖的是子进程的环境变量;但是父进程没有变化,而像上面export等是父进程bash直接操控的,属于内建命令;故还是可以执行的。
这里就比较简单,演示一下就好,会把整张环境变量参数的表展示出来:
ubuntu展示:
这里我们常见认识这些就可;其中OLDPWD的设计就是为了方便我们su 命令可以正常使用,这些了解一下即可。
这里的 $:就是对环境变量名字的执行解释。
这里export 环境变量名字=内容;下面展示下效果:
env效果 :
但是这里如果直接用export命令行导入最后只要退出终端,那么导出到env的环境变量就会消失(后面我们会讲述在vim中修改的操作,这样它不会消失只有vim中删掉并且unset掉才会真正消失)
用来取消导出到或者写入到env中的环境变量;
用法:unset + name
这是我们用export导出进env的环境变量ff=home.:
下面我们用unset去除一下:
这里它会有一个头文件也就是#include<stdlib.h>;
返回一个字符串,在代码中使用;下面演示一下:
代码语言:javascript代码运行次数:0运行复制#include<string.h>
#include<stdio.h>
#include<stdlib.h>
int main(){
ct char *who = getenv("USER");
if(who == ULL) return 1;
if(strcmp(who, "sw")==0)
{
printf("这是程序的正常执行逻辑\n");
}
else
{
printf("Only sw!!\n");
}
}
这样我们就会使用它了。
用的时候必须声明一下;它相当于是一个二级指针,指向的是环境变量表第一个数据(char*);因此可以利用数组的形式去访问这张表(但是一访问就是全部,或者不知道访问哪个的位置;因此一般代码内我们使用getenv()):
代码语言:javascript代码运行次数:0运行复制#include<stdlib.h>
#include<stdio.h>
extern char **environ;
int main(){
for(int i = 0; environ[i]; i++)
{
printf("environ[%d]-> %s\n", i, environ[i]);
}
}
因此不太建议用。
这里我们可以进入vim修改这样就解决了export设置后但是重登系统就会消失的问题。
如果是centos7等就会有.bash_profile,在这里面直接用vim编辑添加就好。下面我们展示一下ubuntu的操作:
回到根目录有个.bashrc的文件用vim打开它(里面是默认补充的)。
接下来我们用vim里面写入格式:export 名字=内容。
但是我们直接echo它的内容是看不到的;需要刷新一下:
代码语言:javascript代码运行次数:0运行复制1· source ~/.bashrc
2. source ./.bashrc
这两种方式都可以。
当我们unset的时候,虽然env展示的没了,但是一刷新又会出现因此还要在.bashrc里面 删掉才行。
这里我们要知道bash既有环境变量又有本地变量(只有bash来操作,它不会像环境变量一样被子进程继承)。
这就是一个本地变量;也就是只有通过bash进行命令行操作才可以执行,也就是说如果bash后的子进程是用不了的。
下面也可以放入环境变量表中。
如:我们写了一个test.sh
直接用命令
代码语言:javascript代码运行次数:0运行复制sh test.sh
这样就运行了。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2024-12-17,如有侵权请联系 cloudcommunity@tencent 删除进程命令行变量程序函数#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上一篇:位图与布隆过滤器
下一篇:红黑树模拟封装map和set
留言与评论(共有 10 条评论) |
本站网友 小淼 | 10分钟前 发表 |
在代码中使用;下面演示一下:代码语言:javascript代码运行次数:0运行复制#include<string.h> #include<stdio.h> #include<stdlib.h> int main(){ ct char *who = getenv("USER"); if(who == ULL) return 1; if(strcmp(who | |
本站网友 北京城建集团有限责任公司 | 2分钟前 发表 |
这里它会有一个头文件也就是#include<stdlib.h>;返回一个字符串 | |
本站网友 南京先欧仪器制造有限公司 | 27分钟前 发表 |
i | |
本站网友 商贸 | 9分钟前 发表 |
而后面的-al就是命令行参数;下面用一个例子演示一下:这样一展示的话 | |
本站网友 盘整 | 1分钟前 发表 |
但是我们直接echo它的内容是看不到的;需要刷新一下:代码语言:javascript代码运行次数:0运行复制1· source ~/.bashrc 2. source ./.bashrc这两种方式都可以 | |
本站网友 海岸城影院 | 21分钟前 发表 |
四.额外补充:4.1本地变量:这里我们要知道bash既有环境变量又有本地变量(只有bash来操作 | |
本站网友 牛腩炖萝卜 | 15分钟前 发表 |
而我们之前学过 | |
本站网友 新教 | 25分钟前 发表 |
它不会像环境变量一样被子进程继承) | |
本站网友 郑州买房 | 24分钟前 发表 |
它不会像环境变量一样被子进程继承) |