Я хочу использовать некоторые псевдонимы в неинтерактивной оболочке, после прочтения этого сообщения и этого сообщения . Вот моя команда:
bash -O expand_aliases -c 'source ~/.bashrc; '
, а вот мой .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
включена.
Как мне это исправить?
Очень простой обходной путь - использовать функцию вместо псевдонима. Есть много ситуаций, когда функции превосходят псевдонимы, и, насколько я могу сказать, нет, где верно обратное.
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
- они кажутся скорее вредными, чем полезными.)
.bashrc
выполняется только для интерактивных оболочек.
Это то, что я сделал. Создайте новый файл .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
на странице manpage:
Если этот параметр задается, когда bash выполняет скрипт оболочки, его value интерпретируется как имя файла, содержащее команды для инициализации оболочка, как в ~/.bashrc.
и:
Когда bash запускается неинтерактивно, чтобы запустить сценарий оболочки, например, он ищет переменную BASH_ENV в среде, увеличивает свое значение, если оно отображается там и использует развернутое значение в качестве имени файла для чтения и выполнения.