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

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

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

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

0
17.04.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
28.01.2020, 02:46

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

0
28.01.2020, 02:46

Теги

Похожие вопросы