当前位置:首页 > 文章 > 正文内容

Linux 环境变量

廖万里3年前 (2022-11-06)文章70330

最近看了一些与linux相关的书籍、文章和文档,想用自己的理解解释一下linux的环境变量。

本文参考内容如下,感兴趣的朋友也可以阅读原文:

linux联机手册页:查询Linux命令

书:Linux命令行(11 -环境)

变量

我的日常开发环境如下:

操作系统:macos

外壳:zsh

可变的

linux中有两种类型的变量:

Shell变量(局部变量):只能在当前shell中使用。

环境变量(全局变量):变量可以传递给子shell。

您可以通过以下两种方式查看定义的变量:

Printenv:没有参数时列出所有环境变量,有参数时列出参数对应的环境变量。

Echo:显示相应的shell变量或环境变量。

外壳变量

在终端中,变量可以以名称=值的形式直接创建:

#等号的左右两边不能有空格。

名称=值

复制代码

您可以通过echo $查看刚刚定义的变量:

echo $name

#值

复制代码

Printenv可以查看定义的环境变量:

#因为name不是环境变量,所以输出内容为空。

printenv名称

复制代码

这样定义的变量只能在当前流程中使用,不能在子流程中使用。

为了验证上面的话,使用bash命令在终端中创建另一个子进程。如您所见,此时再次执行echo $name不会输出任何内容:

➜ ~狂欢

bash-3.2$ echo $name

bash-3.2美元

复制代码

环境变量

如果希望在子流程中使用变量,则需要通过导出来定义变量:

导出名称1 =值1

复制代码

定义的环境变量:

➜~printenv名称1

价值1

➜ ~回声$name1

价值1

复制代码

此时,我们还可以访问子流程中定义的变量:

尝试

bash-3.2$ printenv name1

价值1

bash-3.2$ echo $name1

价值1

复制代码

但是当终端重新打开时,外壳

变量和环境变量将失败,并且无法访问。为了使变量在所有终端永久生效,需要修改配置文件。

,后面会详细描述。

内置环境变量

操作系统中有许多内置的环境变量,可以通过执行printenv:

#一些环境变量

TERM _ SESSION _ ID = w0t0p 0:d35d 538 f-01b 7-407d-AC61-476 CD 68 AE 6e 7

SSH _ AUTH _ SOCK =/private/tmp/com . apple . launchd . 1 goz 8 bcjvc/Listeners

LC _终端_版本=3.4.16

COLORFGBG = 7;0

ITERM _ PROFILE =默认值

XPC _标志=0x0

SHELL=/bin/zsh

_ _ CFBundleIdentifier = com . Google code . ITER m2

UTF-8

TERM_PROGRAM_VERSION=3.4.16

TERM_PROGRAM=iTerm.app

LC_TERMINAL=iTerm2

COLORTERM=truecolor

命令模式=unix2003

路径=/用户/用户名/库/pnpm:/用户/用户名/。bun/bin:/Users/用户名/。nvm/versions/node/v 16 . 14 . 2/bin:/opt/home brew/bin:/opt/home brew/sbin:/Users/username/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/username/。纱线/料仓

复制代码

请注意PATH变量,它定义了目录列表除以:。当用户在终端执行ls等命令时,会在PATH中显示。

找到相应的文件,然后执行它。

作为前端开发者,以我们经常使用的npm为例:

可以看到,npm所在的目录存在于PATH对应的目录列表中,所以我们可以通过终端执行npm命令。其他终端中的可执行命令也是如此。

Node.js中的环境变量(等待批准)

在Node.js中,可以通过process.env访问和修改环境变量:

//访问环境变量

console.log('mock ',process.env.MOCK)

//设置环境变量

process.env.MOCK = '22222 '

复制代码

请注意,当Node.js创建子流程时,默认情况下,环境变量与父流程相同:

从“节点:子进程”导入{ spawn }

console.log('mock ',process.env.MOCK)

process.env.MOCK = '22222 '

const childProcess = spawn('sh ',['-c ',' echo $MOCK'],{ stdio: 'inherit' })

childProcess.on('error ',(err) => {

console.error(错误)

})

复制代码

执行上面的代码MOCK=true npx tsx index.ts,输出如下:

模拟真实

22222

复制代码

外壳初始化文件

每次我们打开终端,shell都会从初始化文件中读取一系列的配置,比如环境变量,别名等。的常见shell初始化文件如下:

文件/etc/profile适用于所有用户的全局配置。/etc/bashrc适用于所有用户的全局配置(专用于bash)~/。zshrc用户的个人zsh配置

用命令cat ~/。zshrc,可以查看配置文件的内容。以下是我的电脑配置文件中的一些代码:

#如果您来自bash,您可能需要更改您的$PATH。

导出路径= $ HOME/bin:/usr/local/bin:$ PATH

#您的oh-my-zsh安装路径。

导出ZSH="$HOME/。哦,我的天"

#设置要加载的主题的名称-如果设置为“随机”,它将

#每次加载oh-my-zsh时加载一个随机主题,在这种情况下,

#要知道加载了哪一个,运行:echo $RANDOM_THEME

#看https://github.com/ohmyzsh/ohmyzsh/wiki/Themes

ZSH_THEME="robbyrussell "

别名cat="pygmentize -g "

复制代码

可以看到,在配置文件中可以执行设置环境变量和别名等一系列操作。

修改配置文件

当然,也可以修改配置文件来实现一些用户自定义的内容。我们可以通过vim命令在命令行中直接修改配置文件。

vim ~/。zshrc

复制代码

例如,我们向配置文件添加一个新的环境变量。

# ...一些其他代码

导出A =测试

复制代码

需要注意的是,这样添加的内容只有在下一次终端重启并再次读取配置文件时才会生效。为了使配置立即生效,请记住执行以下命令:

来源~/。zshrc

#或者。~/.zshrc,两者功能完全一样。

复制代码

执行printenv A,查看是否成功添加了环境变量:

Npm在脚本中执行cli命令

以vite为例。启动项目时,需要在package.json的脚本中配置{dev: "vite"}命令,然后在终端中执行npm run dev,npm。

将执行脚本中与dev相对应的vite命令。

在执行vite命令时,Node.js会将其环境变量PATH设置为node_modules/。bin,也就是在node_modules/.bin中。

在中查找可执行的vite文件。其实现代码如下:

// npm-run-dev.ts

从“节点:子进程”导入{ spawn }

从“节点:url”导入{ fileURLToPath }

从“节点:流程”导入流程

从“节点:路径”导入路径

const _ _ dirname = path . dirname(fileURLToPath(import . meta . URL))

//Core:通过spawn执行sh -c - vite命令,添加。/node_modules/。环境变量的根目录中的bin。

// PATH和cwd要根据自己的目录结构来确定。

const PATH = ` $ { PATH . resolve(_ _ dirname,'../../../', './node_modules/。bin')}:${

process.env.PATH

}`

const ls = spawn('sh ',['-c ','-',' vite'],{

环境:{路径},

cwd: path.resolve(__dirname,'../../../playground/vue-jsx’),

stdio:“继承”

})

ls.on('close ',(code) => {

console.log(`子进程已退出,代码为${code} `)

})

ls.on('error ',(err) => {

console.log('err ',err)

})

复制代码

上面的代码实际上是通过spawn命令中的env来指定命令执行时的环境变量,这样就可以直接运行本地安装的cli了。

。最后,当node_modules/。bin/vite被执行,它将执行真正的vite源代码。

使用tsx执行上述代码,可以达到和npm run dev一样的效果。

标签

本文涉及以下linux命令:

printenv

出口

来源(。)

学习了linux的相关知识,帮助我进一步了解了cli在Node.js中的操作和调试过程,也让我更加精通前端的使用和cli工具的开发。

这是我对linux环境变量的理解。希望这些知识也能帮到你。


本文链接:https://www.kkkliao.cn/?id=241 转载需授权!

分享到:

版权声明:本文由廖万里的博客发布,如需转载请注明出处。


“Linux 环境变量” 的相关文章

英国“最富首相”苏纳克如何一路开挂?

英国“最富首相”苏纳克如何一路开挂?

当地时间10月24日下午两点,是英国保守党在下议院党团1922委员会设定的提交新任保守党党首选举提名的截止时间。在成功获得了197名保守党议员提名,且两位对手约翰逊和莫当特先后宣布退选后,前任财政大臣里希·苏纳克成为唯一符合“入闸”条件的党首候选人,按程序自动当选。随后,苏纳克在保守党中央党部发表了...

步步高创始人段永平,高手有所为有所不为,35条深度思考值得收藏

步步高创始人段永平,高手有所为有所不为,35条深度思考值得收藏

段永平,一个注定在商业史无法被忽视的存在。段永平的经历可谓传奇。他是国内第一个拍下来股神巴菲特午餐的男人,那时候他还带上了现在拼多多的创始人黄铮。而这个一手创办了小霸王、步步高等著名企业,并与Vivo、OPPO、一加和拼多多有着千丝万缕联系的企业家,这位通过投资网易、腾讯和苹果而获利颇丰的投资者,也...

失窃iPhone最终归宿:一台被盗的手机,如何在华强北“焕发新生”

失窃iPhone最终归宿:一台被盗的手机,如何在华强北“焕发新生”

华强北,一个中国数码史上现象级的名词。这条中轴主干道南北长900多米的街区,造就了中国电子科技历史上的神话。但一个硬币有两面,如果说腾讯、TP-Link这样的成功企业代表了华强北向阳的一面,那么华强北的阴暗一面,就离不开两个词:组装机和山寨机。如今,在各大手机厂商物美价廉的新品联合绞杀之下,山寨机已...

如何让自己的努力更有效率?

如何让自己的努力更有效率?

收到了某个朋友发来的困惑咨询,抽象出来后整理出如下问题:为何自己很努力但觉得没有成长,做了很多事情却感觉没有核心竞争力,有浑身的精力不知道该往何处发力,应该如何破局?我是一名技术型产品经理,已经工作了3年,但是感觉自己陷入了成长迷茫期。 团队很重视技术,我花了很多时间来弥补技术知识,但是发现干不过研...

宇宙中发现比光速更快的速度?事实被澄清,这不过是种错觉

宇宙中发现比光速更快的速度?事实被澄清,这不过是种错觉

有比光速更快的速度吗?来自遥远爆炸星系的伽马射线爆发(如图中所示)发射的光比我们所看到的可见光更强大,但这并不意味着它们的速度更快。2018年,天文学家在研究哈勃太空望远镜图像中的两颗碰撞中子星时注意到了一个奇怪的现象:一股明亮的高能粒子流,以 4~7 倍于光速的速度从合并处喷向地球方向。这似乎有些...

win7系统复制文件到U盘提示权限不足的解决方法

win7系统复制文件到U盘提示权限不足的解决方法

  U盘是我们经常使用的移动存储设备,可是也会伴随着各种各样的烦恼。比如有的用户在win7系统中将一些文件复制到U盘里面的时候,系统却提示我们权限不足,很多用户都不懂怎么办,那么如果遇到这种情况我们应该怎么办呢?下面就来看小编是如何解决这种问题的。推荐:笔记本专用win7系统下载1、首先把...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。