запуск emacs-gdb из командной строки, часть 2 - PullRequest
3 голосов
/ 06 июля 2011

Я хочу запустить emacs с запущенным gdb.Я хотел бы, чтобы все аргументы командной строки подавались одновременно.Этот пост: Запускать emacs-gdb из командной строки? , уже решает 95% проблемы, но у меня есть надоедливое раздражающее продолжение этой проблемы.Я действительно должен быть в состоянии передать аргументы, которые имеют пробелы, что-то вроде

edbg path/to/myprog --firstarg "something with spaces" --secondarg 1

Я искал на этом сайте и в Google, и я играл в течение нескольких часов, но я могуКажется, не понять это.

Есть идеи?

1 Ответ

2 голосов
/ 06 июля 2011

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

...