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

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 включена.

Как это исправить?

0
VPfB 17 Апр 2017 в 09:26

2 ответа

Лучший ответ

Очень простой обходной путь — использовать функцию вместо псевдонима. Есть много ситуаций, когда функции превосходят псевдонимы, и, насколько я могу судить, ни в одной, где верно обратное.

 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 - от них больше вреда, чем пользы.)

1
tripleee 23 Апр 2017 в 17:57

.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 в среде, расширяет ее значение, если оно там появляется, и использует расширенное значение в качестве имени файла для чтения и выполнения. .

0
VPfB 17 Апр 2017 в 09:02