我最近用Emacs(64位(安装了MSYS2,目前正在从Windows快捷方式调用该Emacs。它运行良好,就像我下载了适用于Windows的Emacs可执行文件并将其解压缩一样。也就是说,它获取了我所有的Windows环境变量等等。
出于各种原因,我更喜欢从MSYS2 bash shell运行Emacs,并使用该shell中的环境变量。目前,我可以打开一个MSYS2 MINGW64 shell,在命令行上键入emacs
,一切都按照我希望的方式进行
现在,我想把整个东西打包成一个我可以插入到Windows快捷方式中的一行代码,或者我可以从Windows快捷方式调用的脚本。在这篇文章的帮助下,我提出了以下内容:
C:msys64binmintty.exe /bin/env MSYSTEM=MINGW64 /bin/bash -l -c /mingw64/bin/emacs
这成功地打开了Emacs,但未能以通常的方式加载.bash_profile
中的.bashrc
文件:
if [ -f "${HOME}/.bashrc" ] ; then
source "${HOME}/.bashrc"
fi
我在.bashrc
中定义了一个函数,在.bash_profile
中调用,所以这有点重要。没花太多精力就意识到问题是HOME
没有定义,所以根本找不到.bashrc
。但是,如果我这样定义HOME
:
C:msys64binmintty.exe /bin/env HOME=/home/alanhr MSYSTEM=MINGW64 /bin/bash -l -c /mingw64/bin/emacs
我得到了完全相同的结果:.bashrc
没有找到,我的函数也没有执行。这就是它变得奇怪的地方。如果我只是像这样中断对emacs
的呼叫:
C:msys64binmintty.exe /bin/env HOME=/home/alanhr MSYSTEM=MINGW64 /bin/bash -l
我得到了一个bash shell,其中.bashrc
已正确加载,并且我的函数已正确执行。我可以在命令行上键入emacs
,让它完全按照我想要的方式工作
这感觉像是一个典型的错过了我眼前的东西的案例,但我读过bash
手册页,但没有用。有人知道我该怎么做吗?
它是加载.bashrc
的-i
选项。以下对我有效:
C:msys64usrbinmintty.exe -w hide /bin/env MSYSTEM=MINGW64 /bin/bash -l -i -c /mingw64/bin/emacs