当前位置: 首页 > article >正文

命令行参数和环境变量 ─── linux第13课

目录

命令行参数

命令行参数列表: 

 如何实现命令行参数传递到此进程

环境变量

基本概念

常见环境变量

查看环境变量方法

​编辑

环境变量如何写入

总结:

测试PATH


命令行参数

同一个程序,可以根据命令行参数的不同,表现不同功能

比如:指令中的选项的实现.    ls  -al

命令行参数列表: 

        argc: 参数的个数 

        argv[]: 参数清单

运行结果

上面的执行结果根据输入的参数不同,执行结果不同

类似 命令行执行 ls  和ls -al的结果不同

 如何实现命令行参数传递到此进程

例如在命令行中输入 

ls -al

此时父进程是shell ,shell拿到了字符串 ,按照空格打散 ,形成argc和argv[ ]

子进程与父进程,代码共用一份,数据各自私有.对于只读的数据 , 子进程可以看到(包含了argc,argv)

总结:通过此进程的父进程拿到命令行参数列表

环境变量

main()函数的命令行参数不止有两个,还有后面的env[ ],也叫环境变量

  1 #include<stdio.h>
  2 #include<unistd.h>
  3 
  4 int main(int argc, char *argv[], char *env[])
  5 {
  6     printf("我是一个进程,我的pid: %d\n", getpid());
  7     for(int i=0; env[i]; i++ )
  8     {
  9         printf("env[%d]: %s\n", i, env[i]);
 10     }
 11     return 0;
 12 }

运行结果,如下

基本概念

        环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数

        环境变量是系统的配置文件

        环境变量可以理解 OS为了使函数能获取全部的当前环境信息, 从而正常运行 创建的.

        如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。 环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性

常见环境变量

  • PATH : 路径集合(指定命令的搜索路径集合)
  • HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)
  • SHELL : 当前Shell,它的值通常是/bin/bash。

查看环境变量方法

echo $NAME //NAME:你的环境变量名称

上图就是命令行中指定命令的搜索路径,

我们启动自己写的程序需要输入

./myprocess

如果不带 ./ 就显示没有此命令, 就是因为环境变量PATH中没有我们程序的路径

环境变量如何写入

环境变量最初来自系统的配置文件(.bash_profile  和.bashrc), 系统的配置文件在磁盘中

所以环境变量是内存级文件,重启xshell就会从系统的配置文件中重新加载

总结:

  • 环境变量可以理解 OS为了使函数能获取全部的当前环境信息, 从而正常运行 创建的,用于补全当前环境信息.
  • 环境变量是内存级文件,重启xshell就会从系统的配置文件中重新加载

测试PATH

1. 创建hello.c文件

2. 对比./hello执行和之间hello执行

3. 为什么有些指令可以直接执行,不需要带路径,而我们的二进制程序需要带路径才能执行?

4. 将我们的程序所在路径加入环境变量PATH当中, export PATH=$PATH:hello程序所在路径

5. 对比测试

6. 还有什么方法可以不用带路径,直接就可以运行呢


http://www.kler.cn/a/570212.html

相关文章:

  • 物联网 智慧水库管理系统中集成无人机巡逻和隔空喊话
  • 应急响应靶场练习-知攻善防
  • Django框架下html文件无法格式化的解决方案
  • pip安装的库conda环境不能用,解决办法
  • P8623 [蓝桥杯 2015 省 B] 移动距离
  • 教资信息技术之数据库技术
  • Python函数入门指南:从定义到应用
  • 深入浅出:ASP.NET Core 中间件的使用与封装
  • 测试周期紧张?功能与非功能测试的 5 个平衡策略
  • Tailwind CSS 问题:npm error could not determine executable to run
  • 嵌入式C语言学习记录之-14~17day
  • 蓝桥杯 过年【算法赛】
  • vm+centos虚拟机
  • Kafka系列教程 - Kafka 可靠传输 -5
  • HTML在网页开发中的应用与重要性
  • 麒麟V10-SP2-x86_64架构系统下通过KVM创建虚拟机及配置虚机的NAT、Bridge两种网络模式全过程
  • 销售易CRM:用户体验与市场评价深度分析
  • 【网络安全】——二进制协议 vs 文本协议:从原理到实战的深度解析
  • 二叉树专题练习 ——基于罗勇军老师的《蓝桥杯算法入门C/C++》
  • MySQL调优--12--分批插入/更新数据 ---案例2