首页 > 其他分享 >ansible 设置环境变量

ansible 设置环境变量

时间:2024-08-13 23:15:45浏览次数:8  
标签:profile shell 用户 ansible 设置 环境变量 bash 加载

这里有个小知识点
在 Linux 系统中,用户环境变量文件是用来设置用户级别的环境变量和 shell 配置的文件。这些文件可以控制用户的环境,包括路径、命令别名、shell 提示符、自定义函数等。不同的文件在不同的情况下会被加载,并对用户的 shell 会话产生影响。

常见的用户环境变量文件及其作用

  1. /etc/profile

    • 作用: 这是系统范围内的环境变量配置文件,对所有用户生效。当用户登录时(通过交互式的登录 shell,如通过 SSH 登录),系统会首先执行 /etc/profile 中的配置。
    • 加载时机: 每次用户登录时,系统会自动加载 /etc/profile
  2. ~/.profile

    • 作用: 这是每个用户的个人环境变量文件,用于设置用户级别的环境变量。当用户登录时,系统会执行这个文件。可以用来定义用户专属的路径、变量等。
    • 加载时机: 每次用户登录时,系统会自动加载 ~/.profile。对于一些 shell,如 bash,如果没有找到 ~/.bash_profile~/.bash_login,它会执行 ~/.profile
  3. ~/.bash_profile

    • 作用: 这是专门为 bash shell 准备的登录脚本文件。在用户通过交互式登录 shell(如 SSH 登录)时,bash shell 会读取并执行该文件。它通常用于设置环境变量和启动应用程序。
    • 加载时机: 每次用户登录时,bash 会优先加载 ~/.bash_profile,除非指定不加载。~/.bash_profile 通常会包含对 ~/.bashrc 的加载命令。
  4. ~/.bashrc

    • 作用: 这是专门为 bash shell 准备的非登录交互式 shell 初始化文件。它主要用于设置命令别名、函数、shell 提示符、环境变量等配置。在启动一个新的终端或运行一个新的 bash shell 时,会加载这个文件。
    • 加载时机: 每次启动非登录的交互式 shell(如打开一个新的终端窗口)时,bash 会加载 ~/.bashrc
  5. /etc/bash.bashrc

    • 作用: 这是系统范围内的 bash 初始化文件,对所有用户生效。用于在所有用户的非登录交互式 shell 中设置环境变量和其他配置。
    • 加载时机: 每次启动非登录的交互式 shell 时(如打开终端窗口),系统会加载 /etc/bash.bashrc
  6. ~/.bash_logout

    • 作用: 这是 bash shell 在用户注销时执行的文件。可以用来清理临时文件、记录日志等。
    • 加载时机: 每次用户从登录 shell 注销时,bash 会执行 ~/.bash_logout

加载顺序和优先级

  • 登录 shell(如 SSH 登录)时,系统会按照以下顺序加载:

    1. /etc/profile
    2. ~/.bash_profile~/.bash_login~/.profile
    3. ~/.bashrc(通常是通过 ~/.bash_profile 或其他文件手动加载的)
  • 非登录交互式 shell(如打开新的终端)时,系统会加载:

    1. /etc/bash.bashrc
    2. ~/.bashrc

总结

用户环境变量文件在 Linux 系统中起到了配置和定制用户环境的关键作用。通过这些文件,用户可以自定义自己的工作环境,包括添加自定义命令、设置路径和配置 shell 行为。了解这些文件的作用和加载顺序对于有效管理和优化 Linux 工作环境非常重要。

使用lineinfile模块设置环境变量

---
  - hosts: ubuntu
    tasks:
    - name: 设置环境变量
      lineinfile:
          dest: ~/.profile
          regexp: ^export ENV_KEY=
          line: export ENV_KEY=env_value
    - name: 获取环境变量值 #指定bash shell,默认是使用/bin/sh,/bin/sh无法执行source命令
      ansible.builtin.shell: 'source ~/.profile && echo $ENV_KEY'
      args:
        executable: /bin/bash
      register: env_key

    - name: 打印环境变量,inventory_hostname 是当前主机在inventory清单文件中的名称,默认情况下会在playbook中显示出来,一般为ip,也可以自定义名称
      debug:
        msg: "this linux os {{ inventory_hostname }} env_key is {{ env_key.stdout }}"
    - name: 打印环境变量 #ansible_env 变量不包含lineinfile模块设置的变量,不知道为什么
      debug:
        msg: "{{ ansible_env }}"
root@test:~/ansible/env# ansible-playbook env01.yaml  

PLAY [ubuntu] *************************************************************************************************************************************************************************************************************************************************************

TASK [Gathering Facts] ****************************************************************************************************************************************************************************************************************************************************
ok: [192.168.232.100]

TASK [设置环境变量] *******************************************************************************************************************************************************************************************************************************************************
ok: [192.168.232.100]

TASK [获取环境变量值] *****************************************************************************************************************************************************************************************************************************************************
changed: [192.168.232.100]

TASK [打印环境变量] *******************************************************************************************************************************************************************************************************************************************************
ok: [192.168.232.100] => {
    "msg": "this linux os 192.168.232.100 env_key is env_value"
}

TASK [打印环境变量] *******************************************************************************************************************************************************************************************************************************************************
ok: [192.168.232.100] => {
    "msg": {
        "DBUS_SESSION_BUS_ADDRESS": "unix:path=/run/user/0/bus",
        "HOME": "/root",
        "LANG": "en_US.UTF-8",
        "LOGNAME": "root",
        "PATH": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin",
        "PWD": "/root",
        "SHELL": "/bin/bash",
        "SHLVL": "0",
        "SSH_CLIENT": "192.168.232.100 43140 22",
        "SSH_CONNECTION": "192.168.232.100 43140 192.168.232.100 22",
        "SSH_TTY": "/dev/pts/3",
        "TERM": "xterm",
        "USER": "root",
        "XDG_RUNTIME_DIR": "/run/user/0",
        "XDG_SESSION_CLASS": "user",
        "XDG_SESSION_ID": "39",
        "XDG_SESSION_TYPE": "tty",
        "_": "/bin/sh"
    }
}

PLAY RECAP ****************************************************************************************************************************************************************************************************************************************************************
192.168.232.100            : ok=5    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

标签:profile,shell,用户,ansible,设置,环境变量,bash,加载
From: https://www.cnblogs.com/anyux/p/18357920

相关文章

  • svg 图标设置背景颜色
    是的,你可以设置背景图片和渐变颜色的组合。要实现这一点,你可以使用background属性同时指定background-image和background渐变,并结合background-blend-mode进行混合。以下是如何实现的例子:.element{background-image:linear-gradient(toright,rgba(255,0,0,......
  • 【JVM】jvm 线程栈的一些设置 Thread Size
    1.概述下面是jvm线程栈的一些设置,简单的了解一下。2.XssXss和ThreadStackSize是等价的参数,用于设置Java线程栈的大小,单位为Kb。在命令行中,-Xss100K和-XX:ThreadStackSize=100是表示相同意义的参数。Xss参数的实现:Xss参数是通过设置ThreadStackSize数据......
  • 【easyexcel自定义模版导出,字体样式设置】
    文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言学以致用,开箱即用一、maven引包<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.7</version></dependency>......
  • pbootcms教程—设置的会话目录创建失败!
    pbootcms教程—设置的会话目录创建失败!这个问题常见于宝塔面板,用户将pbootcms模板传到宝塔上,打开域名出现这个问题。解决方法:1、打开宝塔面板,左侧找到文件,找到对应的站点目录,如下图:2、按照下图进行设置,点确定,如果默认就是这样的设置,也要点下确定。 ......
  • 陪玩系统app如何配置推送设置,手把手教你uniapp 如何打通消息推送
    进入uniapp开发者中心,开发者中心包名:每个app都有自己的一个身份证,叫做包名,很多地方会用到。包名去HBuilderX获取,点击发行app云打包可获取app包名说明:推送采用uniapp的官方推送,实际uniapp也是和个推合作,走的是个推的sdk。我们采用uniapp的推送1.0版本,不使用2.0,因为2.0必......
  • ansible handlers
    handlers01.yaml----hosts:ubuntuhandlers:-name:restartapacheservice:name=apache2state=restartedtasks:-name:确保APT包列表是最新的apt:update_cache=yes-name:部署apache2apt:name=apache2state=present-name:......
  • k8s设置某台机器不调度
    在Kubernetes中,你可以通过给节点打上NoSchedule或NoExecute污点(taint)来阻止新的Pod调度到该节点上。以下是如何设置某台机器不调度的具体步骤:1.查看节点列表首先,查看当前的节点列表,确定你想要设置为不可调度的节点的名称:kubectlgetnodes2.给节点打污点(Tain......
  • MySQL时区设置和查看
    检查:操作系统的时区MYSQL的时区 中国标准时间(CST)在修改系统时间之后,重新启动MySQL服务器,以确保修改生效。 mysql时区查看‌MySQL时区设置查看全局和会话时区使用命令SELECT@@global.time_zone,@@session.time_zone;可以查看全局和会话的时区设置。......
  • ansible include方法使用
    root@test:~#catRestartPHPProcess.yml----name:RestartPHPProcess#该Task名为RestartPHPProcessservice:name=sshstate=restarted#调用service模块,重启名为php-#fpm的服务root@test:~#cattest.yml----hosts:localhostremote_user:roott......
  • vue3 设置动态 ref 并获取
    <template><el-tabsv-model="tabs.activeComp"type="border-card"class="ownCollections"@tab-change="tabsChange"><el-tab-panev-for="(item,key)intabs.components......