5

Я пытаюсь использовать eshell внутри emacs, поэтому мне не нужно переключаться между emacs и терминалом. При использовании bash у меня есть несколько сценариев bash, которые я обычно использую для экспорта некоторых переменных env (для переключения между различными версиями инструментов и средами сборки). Можно ли как-то выполнить мои скрипты с помощью bash и поместить экспорт (или некоторые из них) в eshell.

В основном я пытаюсь найти bash-скрипт в eshell.

Есть ли способ сделать что-то подобное?

2 ответа2

4

Я думаю, я нашел способ. Я создал скрипт my-init.el с таким содержанием:

  bash -c "source my-init.sh > /dev/null && env |                   \
           grep -E 'MY_ENV\=' |                                     \ 
           sed -e 's/\([^=]*\)=\(.*\)/(setenv \"\1\" \"\2\" \)/g'"  \
           > /tmp/my-init-env
  source /tmp/my-init-env

При получении изнутри eshell он запустит bash, установит исходный код my-init.sh(таким образом, установив переменную MY_ENV ), а затем вызовет env для получения MY_ENV и преобразует его с помощью sed в нечто вроде (setenv "MY_VAR" "value") которая получена из оригинальной оболочки.

Не красиво, но это делает работу!

1

По какой-то причине это является распространенным недоразумением, но "источник" не означает "установить несколько переменных"; это означает (в контексте sh) "выполнить команды в этом файле в текущем контексте". Следовательно, ответ на вопрос «могу ли я получить исходный файл bash в программе, использующей другой несовместимый язык?" нет.

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