我想在运行gdb的情况下启动emacs。我想让所有的命令行参数同时输入。这个帖子: Start emacs-gdb from command line?,已经解决了95%的问题,但我对这个问题有一个烦人的唠叨。我真的需要能够传递有空格的参数,ala
edbg path/to/myprog --firstarg "something with spaces" --secondarg 1
我一直在这个网站和谷歌搜索,我玩了几个小时,但我似乎无法弄清楚这一点。
有什么想法吗?
答案 0 :(得分: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\")"
}
请注意,这不会在包含制表符或换行符的args周围加上引号,这也需要引号;您的$ IFS可能会有所不同。