AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1539132
Accepted
HWe
HWe
Asked: 2025-01-25 00:30:16 +0800 CST2025-01-25 00:30:16 +0800 CST 2025-01-25 00:30:16 +0800 CST

为什么我的别名(通过环境模块设置)没有在终端或 konsole 中加载?

  • 772

这个问题让我抓狂。它在我的所有 RHEL 系统上都运行正常,但在 Ubuntu20LTS 上却无法正常工作。

配置:

当所有用户打开终端/konsole 时,环境模块都会通过“/etc/profile.d”中的脚本加载。模块“别名”为我们所有的项目定义别名,所有用户都将在他们的环境中看到这些别名。据我所知,终端/konsole 将打开“交互式非登录 shell”。在我们的配置中,当打开终端/konsole 时,“.bashrc”将被调用。

在 RHEL 上是预期可以运行但在 Ubuntu20LTS 上无法运行的情况:

打开终端或 konsole --> 模块已加载(通过“etc/profile.d/...”中的脚本)-->“aliases”显示模块“aliases”中定义的所有别名(请参阅本文末尾的“.bashrc”内容):

I am .bashrc and was loaded!
[INFO:] $MODULEPATH=/icd/cfg/modules:

Currently Loaded Modulefiles:
 1) aliases   2) common   3) aliases_ue   
[userXY@host:~]
# alias
alias ATIC183='cd $ICD_PROJ/ATIC183; source $ICD_CFG/env/proj_setup/start_proj.sh'
alias FFT='cd $ICD_PROJ/monarch; source $ICD_CFG/env/proj_setup/start_proj.sh'
alias HXLR0='cd $ICD_PROJ/HXLR0; source $ICD_CFG/env/proj_setup/start_proj.sh'

在Ubuntu20LTS上体验到的:

打开终端 --> 模块已加载 --> “别名” 不显示定义的别名,仅显示来自“.bashrc”的一个定义:

I am .bashrc and was loaded!
[INFO:] $MODULEPATH=/icd/cfg/modules:

Currently Loaded Modulefiles:
 1) aliases   2) common   3) aliases_ue   

[userXY@host:~]
# alias
alias ll='ls -al'

另外还进行了测试但不起作用:

打开终端 --> 通过“模块加载别名”重新加载模块 --> “别名”不显示定义的别名

打开终端 --> “su userXY” --> 模块已加载 --> “别名” 不显示定义的别名

# su userXY
Password: 
I am .bashrc and was loaded!
[INFO:] $MODULEPATH=/icd/cfg/modules:

Currently Loaded Modulefiles:
 1) aliases   2) common   3) aliases_ue   
[userXY@host:~]
# alias
alias ll='ls -al'

打开终端 --> “bash -l” --> 模块已加载 --> “别名” 不显示已定义的别名,但还加载了其他别名

打开终端 --> “su userXY” --> 模块已加载 --> “bash -l” --> alias” 不显示已定义的别名,但还会加载其他别名

# bash -l
I am .bashrc and was loaded!
[INFO:] $MODULEPATH=/icd/cfg/modules:

Currently Loaded Modulefiles:
 1) aliases   2) common   3) aliases_ue  

[userXY@host:~]
# alias
alias ll='ls -al'
alias pat='puppet agent -t'
alias su2='sudo su -'

打开终端 --> “sudo su userXY” --> 没有加载任何模块

# sudo su userXY
ERROR: No module path defined
ERROR: No module path defined
I am .bashrc and was loaded!
[INFO:] $MODULEPATH=

No Modulefiles Currently Loaded.

获取别名需要做哪些工作:

打开终端 --> “sudo su userXY” --> 没有加载模块 --> “bash -l” --> alias 显示所有定义的别名

打开终端 --> ssh localhost --> 模块已加载 --> 别名显示所有定义的别名

# sudo su userXY
ERROR: No module path defined
ERROR: No module path defined
I am .bashrc and was loaded!
[INFO:] $MODULEPATH=

No Modulefiles Currently Loaded.
[userXY@host:~]
# bash -l
I am .bashrc and was loaded!
[INFO:] $MODULEPATH=/icd/cfg/modules:

Currently Loaded Modulefiles:
 1) aliases   2) common   3) aliases_ue      
[userXY@host:~]
# alias
alias ATIC183='cd $ICD_PROJ/ATIC183; source $ICD_CFG/env/proj_setup/start_proj.sh'
alias FFT='cd $ICD_PROJ/monarch; source $ICD_CFG/env/proj_setup/start_proj.sh'
alias HXLR0='cd $ICD_PROJ/HXLR0; source $ICD_CFG/env/proj_setup/start_proj.sh'

看起来这和登录和非登录 shell 有关。但我不明白为什么别名(由加载的模块定义)在一个场景中被覆盖/删除,而在另一个场景中却可用。

这些是我的 $HOME 中的配置文件:

.bash_aliases --> 不存在

.profile——>不存在

.login --> 不存在

.cshrc --> 不存在

.bashrc

#cat .bashrc

case "$0" in
          -sh|sh|*/sh) modules_shell=sh ;;
       -ksh|ksh|*/ksh) modules_shell=ksh ;;
       -zsh|zsh|*/zsh) modules_shell=zsh ;;
    -bash|bash|*/bash) modules_shell=bash ;;
esac
module() { eval `/usr/bin/tclsh8.6 /usr/lib/x86_64-linux-gnu/modulecmd.tcl $modules_shell $*`; }
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

if [ -f ~/.bash_aliases ]; then
        . ~/.bash_aliases
fi

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=


# User specific aliases and functions
export SVN_EDITOR=vi

#colorized shell prompt
export PS1='[\[\033[1;31m\]\u@\[\033[1;34m\]\h:\[\033[0;32m\]\w\[\033[0m\]]\n# '

# load aliases
module load aliases_ue   

#disable beep
xset b off

alias ll="ls -al"
echo "I am .bashrc and was loaded!"
echo -e "[INFO:] \$MODULEPATH=$MODULEPATH\n"
module list

.bash_配置文件

# cat .bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH

.kshrc

# cat .kshrc 
# .kshrc

# Source global definitions
if [ -f /etc/kshrc ]; then
        . /etc/kshrc
fi

# use emacs editing mode by default
set -o emacs

# User specific aliases and functions

任何提示都非常感谢!

command-line
  • 1 1 个回答
  • 69 Views

1 个回答

  • Voted
  1. Best Answer
    HWe
    2025-01-29T20:41:40+08:002025-01-29T20:41:40+08:00

    通过从“环境模块”切换到替代的“Lmod”模块实现(这也是我在 RHEL 上使用的“模块”替代方案),我的问题得到了解决。

    清除“环境模块”并通过 apt 安装“lmod”后,我按照“Lmod”网站上的本教程进行操作: https ://lmod.readthedocs.io/en/latest/030_installing.html#bash-under-ubuntu

    它基本上通过将其添加到“/etc/bash.bashrc”来使交互式非登录 shell(打开终端/konsole 时)加载“/etc/profile.d”下的 *.sh 文件:

    if ! shopt -q login_shell; then
      if [ -d /etc/profile.d ]; then
        for i in /etc/profile.d/*.sh; do
          if [ -r $i ]; then
            . $i
          fi
        done
      fi
    fi
    

    使用此设置,打开终端/控制台时将直接加载模块和别名。

    • 1

相关问题

  • 如何从命令行仅安装安全更新?关于如何管理更新的一些提示

  • 如何从命令行刻录双层 dvd iso

  • 如何从命令行判断机器是否需要重新启动?

  • 文件权限如何工作?文件权限用户和组

  • 如何在 Vim 中启用全彩支持?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve