Итак, насколько я понимаю, у вас определена эта функция 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 может отличаться.