Не удалось развернуть псевдоним в неинтерактивной оболочке

Не удалось развернуть псевдоним в неинтерактивной оболочке

Я хочу использовать некоторые псевдонимы в неинтерактивной оболочке, после прочтенияэта почтаиэта почта. Вот моя команда:

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только для интерактивных оболочек.

Вот что я сделал. Создайте новый файл .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 выполняет скрипт оболочки, его значение интерпретируется как имя файла, содержащего команды для инициализации оболочки, например, ~/.bashrc.

и:

Когда bash запускается неинтерактивно, например, для запуска скрипта оболочки, он ищет переменную BASH_ENV в среде, расширяет ее значение, если оно там встречается, и использует расширенное значение в качестве имени файла для чтения и выполнения.

Связанный контент