阅读后,我想在非交互式 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" "$@"; }
(我拒绝移植你的ls
和echo
别名 - 它们似乎弊大于利。)
答案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,如果出现该变量,则扩展其值,并使用扩展后的值作为要读取和执行的文件名。