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

Linux 环境变量

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

最近看了一些与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 环境变量” 的相关文章

四川公务员考试 真题_福建省选调生考试书籍

四川公务员考试 真题_福建省选调生考试书籍

而在四川的国家公务员考试中,行测中的言语理解题目甚至占到了40道题。所以,很多时候,你会听到“得言语者得行测”就是在强调言语理解在四川公务员考试行测中的重要...2019年四川省省考已进入备考阶段,刷历年省考真题可提升巩固管家整理了33套行测申论四川历练真题,带答案解析需要的同学,看下方图片领取方式...

骁龙8和骁龙8+的日常体验,到底有多大差距?

骁龙8和骁龙8+的日常体验,到底有多大差距?

机哥写过一篇文章。主要呢,就是盘点了今年那些跳水比较严重的旗舰手机。像什么OPPO Find X5 Pro天玑版啊、小米12 Pro啊、一加10 Pro啊等等。相比起刚上市时定价,现在这些机型,普遍的降价幅度都超过了2000块。原本是卖5000多,现在却只卖3000多。。机哥当时发完文章,底下很大一...

马云即便隐退了,眼光依旧毒辣,退出前的发言值得深思

马云即便隐退了,眼光依旧毒辣,退出前的发言值得深思

(ps:灰色的文字为马云的发言,黑色为作者的补充解读,更助于各位理解)马云发言:过去的这一年,很不寻常,事件发生了巨大的变化。疫情也带来了巨大的挑战,在今天所有巨大的不确定当中,有一件事是确定无疑的。那就是数字化的趋势没有改变。数字化以前只是让一些企业活得更好。而今天是企业活下去的关键,数字化的进程...

六零后已经渐渐老了,都是独生子女家庭,以后怎样养老?

六零后已经渐渐老了,都是独生子女家庭,以后怎样养老?

我是68年的,今年54岁,我也只有一个女儿,以后怎么养老的问题,我在十年前就开始准备了,所以我的养老问题我现在一点都不担心,因为我早已经准备好了。我从上班到退休一直在银行储蓄柜工作。工作小柜台,人生大舞台,在几十年的工作中我见识了形形色色的人,也见过很多老人特别是没有退休金的老人晚年凄苦的生活。所以...

netcore有好用的word(docx)、excel(xlsx)及pdf 处理库吗?

如题,所有需求都基于开源免费库基础word主要用来做模版替换,能有docx转pdf最好excel主要用来导入导出,能生成导入模版文件,能设置每个导入模版的下拉框数据(能从数据库读数据)pdf主要用来添加水印文件或者图片。在此感谢分享...

国产办公软件崛起,金山WPS月活用户已超5.7亿;Meta指责苹果夺走部分广告收入;Python 3.11 发布|极客头条

206 篇文章201 订阅订阅专栏「极客头条」—— 技术人员的新闻圈!CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧。整理 | 梦依丹出品 | CSDN(ID:CSDNnews)一分钟速览新闻点!国产办公软件崛起 金山WPS月活用户已超5.7亿美团...

发表评论

访客

看不清,换一张

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