如何在 emacs 的 eshell 中获取 bash 脚本

如何在 emacs 的 eshell 中获取 bash 脚本

我正在尝试在 emacs 中使用 eshell,这样我就不必在 emacs 和终端之间切换。使用 bash 时,我通常会使用一些 bash 脚本来导出一些环境变量(以便在不同的工具版本和构建环境之间切换)。是否可以使用 bash 以某种方式执行我的脚本,并将导出(或其中一些)放入 eshell 中。

基本上,我正在尝试在 eshell 中获取 bash 脚本。

有没有办法做这样的事?

答案1

我想,我找到了一种方法。我创建了一个my-init.el包含以下内容的脚本:

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

当从 eshell 内部获取资源时,它将启动一个 bash,my-init.sh在那里获取资源(从而设置MY_ENV变量),然后调用env获取MY_ENV,并将其转换为类似于在原始 eshell 中获取资源的sed东西。(setenv "MY_VAR" "value")

虽然不漂亮,但是够用!

答案2

出于某种原因,这似乎是一个常见的误解,但“source”并不意味着“设置一些变量”;它意味着(在 sh 的上下文中)“在当前上下文中执行此文件中的命令”。因此,对于“我可以在某个使用其他不兼容语言的程序中 source 一个 bash 文件吗?”这个问题的答案是

相关内容