![自定义键盘快捷键对 bash 脚本不起作用](https://linux22.com/image/984707/%E8%87%AA%E5%AE%9A%E4%B9%89%E9%94%AE%E7%9B%98%E5%BF%AB%E6%8D%B7%E9%94%AE%E5%AF%B9%20bash%20%E8%84%9A%E6%9C%AC%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
我是一名 emacs 用户,编写过一些 emacs 配置文件。
我想运行客户端服务器emacs 的功能使用单一bash 脚本这将负责 emacs 服务器和客户端。脚本将运行服务器(如果尚未运行),然后在所需的框架(终端或图形)中运行客户端。
我已将可执行脚本软链接到/usr/bin/emacs
(覆盖默认值),以便运行emacs
命令可以完成这项工作。该命令emacs
现在从终端以及通过启动脚本Alt+F2
。问题是,将键盘快捷键绑定到同一命令(或脚本)不起作用。
shell脚本可以找到这里。
/usr/bin/emacs
PS:当链接到默认的 emacs 可执行文件(/etc/alternatives/emacs
在我的情况下为)时,键盘快捷键运行良好。
答案1
我尝试重现您的问题并且我想我已经接近了。
我发现您所面临的问题与条件有关if [[ -t 1 ]]
。
根据特发性肺结核
此测试选项可用于检查给定脚本中的 stdin [ -t 0 ] 或 stdout [ -t 1 ] 是否为终端。
因此,脚本将无法通过此条件检测调用它的程序。因此,这不是您问题的准确解决方案。
现在,Ubuntu 中的键绑定在内部通过虚假终端执行。实际上,变量TERM
设置为哑的,当通过键绑定运行命令时。
因此,为了解决您的问题,您可以使用以下代码。
if [ $TERM == "dumb" ]
then
TERMINAL=false
CREATE="-c"
else
TERMINAL=true
CREATE="-nw"
fi
我不能保证它在所有情况下都能正常工作,但它适用于您描述的用法。
希望它能有所帮助。:)