Я хотел написать несколько скриптов и заставить MacVim вызывать некоторые команды bash. У меня есть несколько псевдонимов, и я хотел, чтобы vim мог их вызывать, поэтому я знал, что мне нужна оболочка для входа, просто не знал, как заставить vim использовать ее.

Я прочитал это: https://stackoverflow.com/questions/4642822/vim-is-not-obeying-command-aliases (который не работал для моего MacVim); и это: https://stackoverflow.com/questions/4642822/vim-is-not-obeying-command-aliases, что показалось хорошей идеей.

Поэтому я открыл свой .vimrc и поместил это в: set shell=/bin/bash\ -l .

Сейчас происходит нечто очень странное: в моем .bash_profile есть псевдоним, например:

alias mytest='echo "TEST!!"'

Мои .bashrc исходники .bash_profile , так что я знаю, что это не должно зависеть от того, где установлен псевдоним. Если я захожу внутрь vim и запускаю :! alias mytest

Я вижу это:

alias mytest='echo "TEST!!"'

Press ENTER or type command to continue

Если я бегу :! mytest хотя, это то , что я получаю:

/bin/bash: mytest: command not found

shell returned 127

Press ENTER or type command to continue

Так что у меня нет идей о том, как это может происходить. Почему, когда я запускаю "псевдоним", псевдоним есть, но когда я запускаю псевдоним сам, bash его не распознает?

Я ценю любое понимание, которое каждый может дать мне по этому вопросу.

Спасибо.

ОБНОВИТЬ:

Теперь я попытался изменить строку .vimrc на:

set shell=/bin/bash\ -li

Для того, чтобы сделать оболочку интерактивной, а также являющейся оболочкой входа в систему, она работала.

Поэтому я немного изменил свой вопрос: почему это имеет смысл? Насколько я понимаю, оболочка входа в систему запускает мой .bash_profile и, таким образом, загружает мои псевдонимы. Почему этого недостаточно?

2 ответа2

2

Псевдонимы предназначены для краткости пользователя, поэтому они имеют смысл только в интерактивных оболочках. Поэтому, как говорится на справочной странице bash : «Псевдонимы не раскрываются, когда оболочка не является интерактивной, если только параметр оболочки expand_aliases не установлен с помощью shopt (см. Описание shopt в разделе« КОМАНДЫ ВСТРОЕННЫХ ШЕЛЛОВ »ниже)». Я полагаю, вы можете добавить shopt -s expand_aliases в ваш .bash_profile, но это может вызвать неожиданное поведение в других видах неинтерактивных оболочек ...

0

Это должно :! bash -ic 'mytest; exit'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .