无法在非交互式 shell 中扩展别名

无法在非交互式 shell 中扩展别名

阅读后,我想在非交互式 shell 中使用一些别名这个帖子这个帖子。这是我的命令:

bash -O expand_aliases -c 'source ~/.bashrc; <some alias>'

这是我的.bashrc

 # Bash History
 HISTSIZE=1000
 HISTFILESIZE=2000
 # Colorful Prompt
 PS1='\[\033[01;34m\]\w\n\[\033[01;32m\]\u@\h\[\033[00m\] > '
 # Aliases
 alias ls='ls --color=auto -A -I NTUSER.\* -I ntuser.\*'
 alias echo='echo -e'
 alias docker='"/mnt/c/Program Files/Docker/Docker/resources/bin/docker.exe"'
 alias docker-compose='"/mnt/c/Program Files/Docker/Docker/resources/bin/docker-compose.exe"'

echo输入了一些东西.bashrc并且确信它source ~/.bashrc有效,但别名只是拒绝扩展。我也尝试过:

bash -O expand_aliases -c shopt

以确保该选项expand_aliases设置为打开。

我该如何解决?

答案1

非常简单的解决方法是使用函数而不是别名。在很多情况下,函数优于别名,但据我所知,没有人知道哪些情况恰恰相反。

 docker () { "/mnt/c/Program Files/Docker/Docker/resources/bin/docker.exe" "$@"; }
 docker-compose () { "/mnt/c/Program Files/Docker/Docker/resources/bin/docker-compose.exe" "$@"; }

(我拒绝移植你的lsecho别名 - 它们似乎弊大于利。)

答案2

.bashrc仅针对交互式 shell 执行。

这就是我所做的。.bash_env在您的主目录中创建一个新文件。将所有别名放在那里,例如:

shopt -s expand_aliases
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias vi='vim'

然后在您的中引用它.bash_profile(当然,在那里放置一个真实的路径名):

 export BASH_ENV='/home/username/.bash_env'

(注销并登录即可激活)


BASH_ENV在联机帮助页中:

如果在 bash 执行 shell 脚本时设置此参数,则其值将被解释为包含初始化 shell 的命令的文件名,如 ~/.bashrc 中。

和:

当 bash 以非交互方式启动时,要运行 shell 脚本,例如,它会在环境中查找变量 BASH_ENV,如果出现该变量,则扩展其值,并使用扩展后的值作为要读取和执行的文件名。

相关内容