精华内容
下载资源
问答
  • 利用shell脚本添加环境变量
    千次阅读
    2020-09-14 19:47:27

    在脚本中export的环境变量无法导入当前shell环境。因为执行脚本的时候会启动一个子shell环境。执行完毕,子shell退出。

     

    可以使用source xxx.sh 或者 . xxx.sh的方式设置当前shell的环境变量

     

    https://www.cnblogs.com/zzdbullet/p/9953144.html

    https://blog.csdn.net/moqingxinai2008/article/details/53909464

    更多相关内容
  • 主要介绍了Linux Shell脚本系列教程(四):使用函数添加环境变量,本文对环境变量的一知识作了介绍,并给出普通添加环境变量和使用函数添加环境变量的方法,需要的朋友可以参考下
  • 环境变量和用户自定义变量最主要的区别在于,环境变量是全局变量,而用户自定义变量是局部变量。用户自定义变量只在当前的 Shell 中生效,而环境变量会在当前 Shell 和这个 Shell 的所有子 Shell 中生效。如果把环境...

    环境变量和用户自定义变量最主要的区别在于,环境变量是全局变量,而用户自定义变量是局部变量。用户自定义变量只在当前的 Shell 中生效,而环境变量会在当前 Shell 和这个 Shell 的所有子 Shell 中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的 Shell 中生效。

    这是有区别的,如果环境变量不写入配置文件,那么当前 Shell 一旦终止,这个环境变量就会消失,而只有写入配置文件才会永久地在所有 Shell 中生效。

    在 Linux 中一般通过环境变量配置操作系统的环境,如提示符、查找命令的路径、用户家目录等,这些系统默认的环境变量的变量名是固定的,我们只能修改变量的值。

    当然,我们也可以手工定义环境变量,不过这些自定义的环境变量不能修改操作系统环境,其只是一个全局变量而已。

    环境变量设置

    环境变量和用户自定义变量的设置方法相比,只需通过 export 命令将变量声明为环境变量即可。命令如下:

    [root@localhost ~]# export age="18"

    #使用export声明的变量就是环境变量

    这样年龄就是环境变量了。当然也可以先把变量声明为本地变量,再用 export 声明为环境变量,命令如下:

    [root@localhost ~]# gender=male

    [root@localhost ~]# export gender

    这样性别也被声明为环境变量了。前面说过,用户自定义变量和环境变量的区别就是:用户自定义变量只能在当前 Shell 中有效,而环境变量在当前 Shell 和所有子 Shell 中有效。比如:

    [root@localhost ~]# name="zhang san"

    #把姓名声明为本地变量

    [root@localhost ~]# export age="18"

    #年龄声明为本地变量

    [root@localhost ~]# gender=male

    #性别声明为本地变量

    [root@localhost ~]# export gender

    #性别升级为环境变量

    然后我们查询一下这些变量:

    [root@localhost ~]# set

    …省略部分内容…

    gender=male

    name='zhang san'

    age=18

    在当前 Shell 中可以看到这三个变量。

    [root@localhost ~]# bash

    #再调用一次bash,也就是进入子Shell

    [root@localhost ~]# set

    #再次查询变量

    …省略部分输出…

    age=18

    gender=male

    #在子Shell中只能看到环境变量"age"和"gender",而不能查询到用户自定义变量"name"

    可以看到,在子 Shell 中只能看到环境变量"age"和"gender",这就是环境变量和用户自定义变量的区别。

    环境变量查询和删除

    set 既可以查询所有的变量,也可以查询环境变量,我们刚刚 的实验就是使用 set 命令进行环境变量查询。当然,也可以使用 env 命进行环境变量的查询,命令如下:

    [root@localhost ~]# env

    HOSTNAME=localhost.localdomain

    SELINUX_ROLE_REQUESTED=

    SHELL=/bin/bash

    …省略部分输出…

    env 和 set 命令的区别是,set 命令可以查看所有变量,而 env 命令只能查看环境变量。我们可以发现系统默认有很多的环境变量,这边环境变量的具体含义会在后续章节中详细介绍。

    再来说说环境变量的删除。其实环境变量的删除方法和用户自定义变量是一样的,都使用 unset 命令,命令如下:

    [root@localhost ~]# unset gender

    [root@localhost ~]# env | grep gender

    #删除环境变量gender

    展开全文
  • 小编典典使用shell=True与您现有的脚本首先,就 最简单的事情而言 -如果您使用shell=True,则可以告诉外壳程序开始运行未经修改的现有脚本内容。也就是说-如果您最初是这样做的:subprocess.Popen(['your-command', ...

    小编典典

    使用shell=True与您现有的脚本

    首先,就 最简单的事情而言 -如果您使用shell=True,则可以告诉外壳程序开始运行未经修改的现有脚本内容。

    也就是说-如果您最初是这样做的:

    subprocess.Popen(['your-command', 'arg1', 'arg2'])

    …然后您可以执行以下操作,以几乎相同的安全性保证执行同一命令(唯一的其他漏洞,只要它们的内容file1.sh受信任,就是带壳问题,例如shellshock):

    # this has the security of passing explicit out-of-band args

    # but sources your script before the out-of-process command

    subprocess.Popen(['. "$1"; shift; exec "$@"', "_", "./file1.sh",

    "your-command", "arg1", "arg2"], shell=True)

    使用/proc/self/environ在NUL分隔的流出口环境变量

    理想的做法是以明确的形式导出环境变量-NUL分隔的流是理想的-然后在Python中解析该流(格式非常明确)。

    假设使用Linux,则可以按如下所示导出完整的环境变量集:

    # copy all our environment variables, in a NUL-delimited stream, to myvars.environ

    cat myvars.environ

    …或者您可以手动导出一组特定的变量:

    for varname in HORCMINST PATH; do

    printf '%s=%s\0' "$varname" "${!varname}"

    done >myvars.environ

    在Python中读取和解析NUL分隔的流

    然后,您只需要阅读并解析它们:

    #!/usr/bin/env python

    env = {}

    for var_def in open('myvars.environ', 'r').read().split('\0'):

    (key, value) = var_def.split('=', 1)

    env[key] = value

    import subprocess

    subprocess.Popen(['your-command', 'arg1', 'arg2'], env=env)

    您也可以通过运行立即应用这些变量os.environ[key]=value。

    在bash中读取和解析NUL分隔的流

    顺便说一下,同样的格式也很容易在bash中解析:

    while IFS= read -r -d '' var_def; do

    key=${var_def%%=*}

    value=${var_def#*=}

    printf -v "$key" '%s' "$value"

    export "$key"

    done

    # ...put the rest of your bash script here

    现在, 为什么要 使用NUL分隔的流?由于环境变量是C字符串-与Python字符串不同,它们不能包含NUL。因此,NUL是可以安全地用于定界的唯一字符。

    例如,一个尝试使用换行符的人可能会被一个 包含 文字换行符的环境变量所困扰-

    并且,例如,如果有人将一个简短的Python脚本嵌入到一个环境变量中,那是一个非常合理的事件!

    2020-06-03

    展开全文
  • 您当前的脚本甚至不会更改Perl脚本本身的环境变量.相反,它调用shell作为子进程; shell进程执行. /root/.profile,仅在该shell进程中更新$LD_LIBRARY_PATH.您可以通过更新%ENV来更改Perl脚本中的环境变量(更确切地说,...

    您当前的脚本甚至不会更改Perl脚本本身的环境变量.相反,它调用shell作为子进程; shell进程执行. /root/.profile,仅在该shell进程中更新$LD_LIBRARY_PATH.

    您可以通过更新%ENV来更改Perl脚本中的环境变量(更确切地说,在运行Perl脚本的过程中):

    $ENV{LD_LIBRARY_PATH} = '/'; # or some more reasonable value

    正如perldoc -v%ENV所说:

    %ENV The hash %ENV contains your current environment. Setting a value in “ENV” changes the environment for any child processes you subsequently “fork()” off.

    但那可能仍然不会做你想要的;它不会(也不会)影响调用Perl脚本(您的交互式shell)的进程的环境,只会影响Perl进程本身及其调用的任何内容.

    我假设您要在当前的交互式shell进程中更新$LD_LIBRARY_PATH.为此,您可以让Perl脚本打印一个将更新$LD_LIBRARY_PATH的shell命令.然后,您可以执行它,然后评估其输出,而不是简单地运行Perl脚本.例如:

    $cat env.pl

    #!/usr/bin/perl

    use strict;

    use warnings;

    print "export LD_LIBRARY_PATH=/\n";

    $./env.pl # just prints the command without executing it

    export LD_LIBRARY_PATH=/

    $eval $(./env.pl) # executes the command in the current shell

    $echo $LD_LIBRARY_PATH

    /

    $

    这假设您当前的shell是bash或类似的东西.

    另一种选择:修改%ENV后,您的Perl脚本可以调用另一个命令,甚至是新的交互式shell.新进程将从Perl脚本继承其环境.但这可能有点麻烦;例如,如果新进程是交互式shell,则它不会从父shell继承未导出的变量或历史记录.

    (一个注意事项,与您的问题没有直接关系:您正在使用/root/.profile这一事实意味着您正在以root身份执行操作(超级用户).这可能很危险.使用root帐户(通过记录进入它或通过sudo仅用于实际需要root权限的东西.对于其他任何东西,使用个人用户帐户.

    展开全文
  • /Program Files (x86)/Graphviz2.38import osos.environ["PATH"] += os.pathsep + 'C:/Program Files (x86)/Graphviz2.38/bin/' #注意修改你的路径os.environ[‘path']返回的是所有环境变量的所在的位置,...
  • 查看环境变量 print(os.environ["PATH"]) 示例 添加环境变量 注意:添加环境变量我们要以追加的形式添加,不要以覆盖的形式添加 os.environ["PATH"] += os.pathsep + "路径" os.pathsep 代表分号,在PATH中每...
  • 这里主要是crontab中调用sh总是提示找不到xxxx的环境变量有问题,单独运行却没问题。 这里只要在对应的sh文件中添加: #!/bin/bash . /etc/profile 这样既可加载/etc/profile的环境变量,其他环境变量文件只要....
  • 发现环境变量的配置有时候读取失败. 同时在切换角色的时候, 如 su - user 和 su user 实际上的读取环境配置是不一样的. 大致介绍这里, 接下来进入正题。概念终端引用wiki百科的介绍终端是一台电脑或者计算机系统,...
  • [Service] RuntimeDirectory=elasticsearch Environment=JAVA_HOME=/opt/jdk1.8.0_65/ Environment=ES_HOME=/usr/share/elasticsearch Environment=ES_PATH_CONF=/etc/elasticsearch Environment=PID_DIR=/var/...
  • linux中配置jdk环境变量脚本 #!/usr/bin/env bash set -e root=$( cd $(dirname $0)/.. pwd ) tar -zxf jdk所在目录地址/jdk1.8.0_151.tar.gz -C /data ln -sf /data/jdk1.8.0_151 /data/jdk sed -i '/JAVA...
  • linux shell java lib(linux shell脚本加载java环境变量)用shell来启动java应用程序,只要遍历lib目录#!/bin/shPROJECT_HOME=/home/admin/projectMAINCLASS=com._8qiu.app.MainClassCLASS_PATH=${PROJECT_HOME}/...
  • 1、Linux环境变量是保存在变量PATH中,可通过Linux shell命令 echo $PATH 查看输出内容,或者直接输入export查看。 2、Linux环境变量值之间是通过冒号进行隔开的( : ) 格式为:PATH=$PATH:<PATH 1>:<PATH...
  • linux添加环境变量4种方法

    千次阅读 2021-05-13 11:35:51
    一、需要明白以下2点:1、Linux环境变量是保存在变量PATH中,可通过Linux shell命令 echo $PATH 查看输出内容,或者直接输入export查看。2、Linux环境变量值之间是通过冒号进行隔开的( : )格式为:PATH=$PATH::::-...
  • 全局变量对shell会话和所有生成的shell都是可见的,局部变量只...局部变量只能在定义他们的进程中可见,set命令可显示某个特定进程设置的所有环境变量,包括局部变量、全局变量以及用户自定义变量。myvalue=hello,e...
  • Linux 添加环境变量和删除环境变量

    千次阅读 2021-05-13 05:29:07
    linux中,查看当前全部的环境变量的命令式env.当然也可使用 echo来查看环境变量的值。例如查看PATH的内容:echo $PATH例如要将/home/rongdeguo/Code 加入环境变量中,可以在shell中输入export PATH=$PATH...
  • 多半Java它需要花费大量的精力在开发环境的配置,于Linux下一个,构造Java环境变量,很可能加入这一努力。为此,我做了一个bash脚本来配置自己主动Java环境变量。你只需要的例子,下面的脚本,你下载jdk压缩成一个...
  • linux里的shell环境变量

    2021-05-13 18:03:05
    1.什么是环境变量环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,比如临时文件夹位置和系统文件夹位置等。这点有点类似于DOS时期的默认路径,当你运行某些程序时除了在当前文件夹中寻找外,还...
  • 方式 优点 备注 .bash_profile 打开(或者登录shell)后自动生效。对所有shell进程生效 需要根据不同的shell修改对应的配置文件 ...对当前shell及当前shell衍生的子shell都有效。...仅对当前命令...
  • 以下脚本可以在编译时指定./configure --prefix=`pwd`/dist 中放入一个profile文件,然后使用的时候直接source profile,可以实现当前任意目录执行脚本环境变量生效 #/bin/bash SHELL_PATH=$(readlink -f `...
  • Linux配置环境变量添加JDK 一、下载并解压JDK(以下为两个常用版本) JDK 链接 JDK8 Oracle JDK8 Download JDK11 Oracle JDK11 Download 二、需要配置的环境变量 变量名 作用 备注 PATH 指定命令...
  • linux配置java环境变量

    2021-03-17 12:02:57
    一. 解压安装jdk在shell终端下进入jdk-6u14-linux-i586.bin文件所在目录,执行命令 ./jdk-6u14-linux-i586.bin 这时会出现一段协议,连继敲回车... 需要配置的环境变量1. PATH环境变量。作用是指定命令搜索路径,在s...
  • 我正在尝试永久设置环境变量。 但暂时可以正常工作。I am trying to set a environmental variable permanently. but temporarily it is working.如果我在程序下面运行,我得到了可变路径。 关闭它并打开新终端后,...
  • Linux环境变量简述

    千次阅读 2021-05-14 21:38:34
    通俗的讲,环境变量就是告诉电脑 (实际是操作系统)几个目录。这几个目录下存储几个执行文件,如前面显示的/usr/bin目录,大部分的系统命令都在这个目录下。当我们输入命令mkdir时,系统就会在环境变量所代表的几个...
  • PATH的值是一系列目录,当您运行一个程序时,Linux在这些目录下进行搜寻。用以下命令可以看到PATH的值。$ echo $PATH例如,在主机中,用户yogin的PATH值为:/opt/kde/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/...
  • 直接上实现过程:一. 解压安装jdk在shell终端下进入jdk-6u14-linux-i586.bin文件所在目录,执行命令 ./jdk-6u14-linux-i586.bin 这时会出现一段协议,连继敲... 需要配置的环境变量1. PATH环境变量。作用是指定命...
  • 临时创建环境变量 export varname=value 临时删除环境变量 unset varname
  • Linux Crontab 获取环境变量配置解析使用Laravel分版本环境部署时遇到的问题Crontab 执行 Laravel 获取不到用户全局变量,通过查阅资料获知 Crontab 载入配置的时候 并未载入 /etc/profile ;针对这个现象 初期解决...
  • 本章,我们将学习在类 Unix 系统中如何使用变量。一个变量是一个字符串定义,它可以被你赋值,赋值可以是一个数值,一段文本,文件名,设备或任何其它类型的数据。一个变量不会比一个类似指针指向实际的内容具有更多...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 80,687
精华内容 32,274
关键字:

linux脚本加入环境变量