从命令行启动emacs-gdb(第二部分)

3
我希望能够在运行gdb的同时启动emacs。我想一次性输入所有命令行参数。这篇文章:Start emacs-gdb from command line?,已经解决了95%的问题,但是我有一个非常麻烦的后续问题。我真的需要能够传递具有空格的参数,类似于
edbg path/to/myprog --firstarg "something with spaces" --secondarg 1

我在这个网站和谷歌上搜索了很久,花费了几个小时的时间尝试,但似乎无法解决这个问题。

有什么想法吗?

1个回答

2

所以,我理解您定义了这个Bash函数:

edbg() { emacs --eval "(gdb \"gdb --annotate=3 $*\")";}

如果参数中有空格的话,它就不能正常工作,因为空格会被重新解析成新单词界限。在Bash脚本中,这是一个很常见的问题,所以有一个特殊的变量$@,当它在双引号字符串内部时,将会以不同的方式扩展函数的参数。这让我们走了一半路。剩下的就是将引号重新放回它们周围:

edbg() {
  arglist="";
  for a in "$@"; do
    if [[ $a == ${a/ /} ]]; then
      arglist="$arglist $a";
    else
      arglist="$arglist \\\"$a\\\"";
    fi
  done;
  emacs --eval "(gdb \"gdb --annotate $arglist\")"
}

请注意,这不会在参数包含制表符或换行符时加上引号;你的$IFS可能会有所不同。

感谢db48x。这让我找到了我需要的东西。为了帮助其他人,如果你在上面补充以下这行代码,这个例子应该可以完全按照预期工作:emacs --eval "(gdb "gdb --annotate=3; -cd pwd --args $arglist")"。 - graphicsMan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接