Shell脚本启动GUI Emacs时目录错误与后台执行失效问题求助
问题解决
1. Emacs未运行时打开主目录下的文件问题
当直接执行emacs "$@" &启动Emacs GUI时,它默认会将工作目录切换到你的主目录($HOME),所以你传入的相对路径文件会被解析为主目录下的文件,而非当前执行脚本的目录。
解决方式:启动Emacs时显式指定工作目录为脚本当前执行目录,修改脚本中的启动命令:
emacs --chdir "$PWD" "$@" &
这样Emacs启动后会在$PWD目录下解析相对路径,就能正确打开~/foo/bar.txt这类文件。
2. &未生效、无法返回命令行问题
这是因为Emacs GUI进程在部分终端环境下,即使加上&仍会与终端保持关联,导致终端无法立即恢复输入。有两种解决思路:
方案一:用nohup脱离终端后台启动
修改启动命令为:
nohup emacs --chdir "$PWD" "$@" >/dev/null 2>&1 &
>/dev/null 2>&1用来屏蔽nohup的输出信息,避免自动生成nohup.out文件。
方案二:统一使用emacsclient(更推荐)
不需要判断Emacs是否运行,emacsclient检测到无守护进程时会自动启动,直接简化脚本:
#!/bin/bash echo "Script executed from: ${PWD}" emacsclient -c -a "" "$@"
-c:创建新的GUI窗口-a "":无Emacs守护进程时自动启动(空字符串表示使用默认启动命令)
这种方式不管Emacs是否预先运行,都能正确打开当前目录下的文件,且执行后会立即返回终端,无需手动加&。
内容的提问来源于stack exchange,提问作者Paul Gowder
相关产品推荐
相关产品推荐

