当我执行环境命令,比如env
、set
和unset
时,会发生什么事情呢?
set hello= hello world!
unset find
你如何处理这些命令?更改是永久性的还是临时的?更改在哪里可见?我是一个Ubuntu新手。
当我执行环境命令,比如env
、set
和unset
时,会发生什么事情呢?
set hello= hello world!
unset find
你如何处理这些命令?更改是永久性的还是临时的?更改在哪里可见?我是一个Ubuntu新手。
每个进程被创建时都会获得自己的环境,其生命周期与进程一样长。您的 shell 就像任何其他进程一样。它有自己的环境。
如果您输入set而没有参数,您将看到现有的内容。其中许多设置用于控制程序行为,如搜索路径,所需的X11显示,主目录(如果不是/ home / yourname)等。
使用环境变量的真正作用是任何你需要它的地方。任何时候,当您需要将一些有用的信息(例如某些程序的命令行选项的长列表)存储到其他应用程序可以读取的变量中,或者您可以从shell访问的变量中,请使用环境变量。
例如:
USUAL_CONFIGURE_OPTS="--prefix=/home/charlie --sysconfdir=/home/charlie/tmp-etc"
./configure $USUAL_CONFIGURE_OPTS --and-additional-arguments
编辑:
作为一名程序员,我会读取环境以确定用户的偏好并遵守它们。例如,如果设置了变量 POSIXLY_CORRECT,则会影响我的程序的输出。环境是用户告诉程序如何行事的地方。同样,环境也是用户存储有用信息的方便之地,就像我上面所描述的那样。
再次回复您的评论,每个被执行的程序都是一个进程。进程有自己的地址空间(自己的内存),其环境存储在该空间中。这意味着环境特定于该进程,仅在进程本身存在的时间内存在。
编辑2:
我认为我现在完全理解您的问题。如果有人说虚拟环境,他们只是指出环境位于应用程序的地址空间中,该地址空间由内核映射为虚拟内存(某些页面可能位于物理内存中,某些页面可能位于交换空间、共享动态对象等中)。
除非该进程明确为该特定区域创建映射并与另一个进程共享,否则不允许任何进程访问另一个进程的环境。同样,进程的地址空间是完全私有且独立于其他进程的。环境变量驻留在该地址空间中,否则该进程无法访问或操作它们。
这些更改是暂时的,仅在当前的 shell 中持久存在。当您在您的 ~/.profile
或 ~/.bash_profile
中设置环境变量(只需使用已经存在的一个,使用 ls -a ~
查看),它们将是真正的永久性,因为每次打开新的 shell 时这些文件都会被“源化”。
例如,如果您添加了:
export HELLO="world"
把这个变量加到你的~/.profile
文件中,每次打开一个新的 shell 时,这个变量就会变得可用(你可以用source ~/.profile
命令更新当前的 shell)。你可以使用以下命令进行测试:
$ echo $HELLO
world
环境变量在您的系统上用于脚本。您可以执行诸如设置您喜欢的编辑器等操作:
export EDITOR="nano"
一个有用的事情是设置您的提示符字符串,例如:
Bill:~$ export PS1="u is awesome$ "
Bill is awesome$ ls
Bill is awesome$ du -h
Bill is awesome$ ...etc...
就像参数列表一样,进程分配了一段用于存储环境变量的内存区域。我认为它是一个以