网站demo 工具,wordpress后台界面样式,wordpress用户,centos 一键 wordpress环境变量 基本概念 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数 如#xff1a;我们在编写C/C代码的时候#xff0c;在链接的时候#xff0c;从来不知道我们的所链接的动态静态库在哪 里#xff0c;但是照样可以链接成功#…环境变量 基本概念 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数 如我们在编写C/C代码的时候在链接的时候从来不知道我们的所链接的动态静态库在哪 里但是照样可以链接成功生成可执行程序原因就是有相关环境变量帮助编译器进行查找。 环境变量通常具有某些特殊用途还有在系统当中通常具有全局特性
常见环境变量
PATH : 指定命令的搜索路径HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)SHELL : 当前Shell,它的值通常是/bin/bash。
查看环境变量方法 echo $NAME //NAME:你的环境变量名称
命令行传参数
#include stdio.h
int main(int argc, char *argv[], char *env[])
{
int i 0;
for(; env[i]; i){
printf(%s\n, env[i]);
}
return 0;
} 命令行参数可以通过选项来执行不同的子功能 #includestdio.h2 #includestring.h
W 3 int main(int argc,char *argv[])4 {5 if(argc!2)6 {7 printf(usage:%s [-a|-b|-c]\n,argv[0]);8 9 }10 const char *argargv[1];11 if(strcmp(arg,-a)0) printf(这是-a选项 功能1\n);12 else if(strcmp(arg,-b)0)printf(这是-b选项 功能2\n);13 else if(strcmp(arg,-c)0)printf(这是-c选项 功能3\n);14 else printf(usage:%s [-a|-b|-c]\n,argv[0]); 15 return 0; 16 } 所以类比一下main函数也是一个进程所带的命令行参数由bash切分main函数的命令行参数int main(int argc, char *argv[], char *env[])所带的选项是实现程序不同子功能的方法
进程拥有一张表argv表用来支持选项功能
测试HOME 其实Linux里面的指令都是二进制文件然后再链接我们总结写的文件最后汇到一块一起运行要运行一个二进制文件必须先找到它 ./是在文件树下找但是我把二进制拷贝到home下系统默认的路径下我们不带./也能跑这也是其他指令的由来 系统中存在环境变量来帮助找到二进制文件 就是PATH 系统默认的搜索路径
测试PATH
直接覆盖路径 将二进制文件code的路径覆盖原先的path路径code可以跑但是原先的指令跑不了了因为原先的路径找不到了
添加路径 这种是在原先路径下加一条路径自带命令和code都能跑但是这种不易加太多自己写的二进制没有经过时间及用户的沉淀一般bug较多写进去也没关系以上两种重启xshell就自动复原了
理解argv表
在bath进程启动的时候在它自己内部构建出一张表在用户输入指令时首先被bath拿到被拆分成若干个字符串放在argv[0],argv[1],argv[3]...指针数组argv指向他们bath通过argv【0】下的程序名字找到path下的二进制来运行 所以在bath内部下有两张表一个是环境变量表(path)一个是命令行参数表(argv) 环境变量的组织方式 每个程序都会收到一张环境表环境表是一个字符指针数组每个指针指向一个以’\0’结尾的环境 字符串
和环境变量相关的命令
echo: 显示某个环境变量值export: 设置一个新的环境变量env: 显示所有环境变量unset: 清除环境变量set: 显示本地定义的shell变量和环境变量
通过代码如何获取环境变量
命令行第三个参数 #includestdio.h2 #includestring.h3 int main(int argc,char *argv[],char * env[])4 {5 (void)argc;6 (void)argv;7 8 for(int i0;env[i];i)9 {10 printf(env[%d]-%s\n,i,env[i]); 11 12 }13 return 0;14 }通过第三方变量environ获取
#include stdio.h
int main(int argc, char *argv[])
{
extern char **environ;
int i 0;
for(; environ[i]; i){
printf(%s\n, environ[i]);
}
return 0;
}
libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时 要用 extern声明。
通过系统调用获取或设置环境变量
export
获取的是父进程的环境变量,可通过export来新添加环境变量环境变量可以通过子进程来继承 getenv
通过名字获取环境变量获取成功返回起始变量地址否则就是NULL
#include stdio.h
#include stdlib.h
int main()
{
printf(%s\n, getenv(PATH));
return 0;
} 环境变量通常是具有全局属性的 环境变量通常具有全局属性可以被子进程继承下去
bath有两套变量
本地变量
只在bash内被使用不会被子进程继承 环境变量
环境变量在谁里面bash
#include stdio.h
#include stdlib.h
int main()
{
char *env getenv(MYENV);
if(env){
printf(%s\n, env);
}
return 0;
}
运行结果啥也没有 ,说明该环境变量根本不存在 导出环境变量 export MYENVhello world 注意环境变量是可以被子进程继承下去的 内建命令有bash自己去执行其他的都是调用子进程