美文网首页
ansible(3)执行过程中系统环境变量

ansible(3)执行过程中系统环境变量

作者: hk_faith | 来源:发表于2021-02-21 15:31 被阅读0次

    问题

    当某个软件如java安装在某个用户下,软件的环境变量放在 ~/.bash_profile~/.zshrc .SSH 远程执行脚本报错"command not found" .环境变量不生效。

    login shell 和 non-login shell

    Login shell : 登陆linux 系统的时候,要求输入 用户名和密码或者 SSH key 登陆时。

    Non-login shell: 用 Ansible 在目标机器上远程执行Shell 脚本的时候,就是non-login shell

    linux bash 环境配置文件

    终端运行 man bash

    FILES
           /bin/bash
                  The bash executable
           /etc/profile
                  The systemwide initialization file, executed for login shells
           /etc/bash.bashrc
                  The systemwide per-interactive-shell startup file
           /etc/bash.bash.logout
                  The systemwide login shell cleanup file, executed when a login shell exits
           ~/.bash_profile
                  The personal initialization file, executed for login shells
           ~/.bashrc
                  The individual per-interactive-shell startup file
           ~/.bash_logout
                  The individual login shell cleanup file, executed when a login shell exits
           ~/.inputrc
                  Individual readline initialization file
    

    参考 鸟哥私房菜:

    • login shell加载环境变量的顺序是:① /etc/profile ② ~/.bash_profile ③ ~/.bashrc ④ /etc/bashrc
    • 而non-login shell加载环境变量的顺序是: ① ~/.bashrc ② /etc/bashrc

    non-login shell 的环境配置问题的解决

    方法1: 把配置放在 non-login shell 加载下的文件

    方法1:如果把配置放在 ~/.bash_profile 中,需要non-login shell 时先 source ~/.bash_profile 再执行命令

    虽然大多数情况下,在Shell开头用#!/usr/bin/env bash比#!/bin/bash更有通用性,但是在通过SSH远程执行Shell脚本时,Shell开头要用#!/bin/bash

    Ansible的become进行用户切换

    参考

    become 官方参考文档

    相关文章

      网友评论

          本文标题:ansible(3)执行过程中系统环境变量

          本文链接:https://www.haomeiwen.com/subject/jvjqfltx.html