我正在尝试在 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 文件吗?”这个问题的答案是不。