Подтвердить что ты не робот

Как удалить новую строку из вывода процесса?

Я вызываю git, чтобы получить файл верхнего уровня (согласно Есть ли способ получить корневой каталог git в одной команде? ).

(let ((tmpbuffer (get-buffer-create (make-temp-name "git"))))
  (call-process "git" nil tmpbuffer nil "rev-parse" "--show-toplevel")
  (with-current-buffer tmpbuffer
    (with-output-to-string
      (princ (buffer-string))
      (kill-buffer))))

Но в возвращаемой строке возвращается завершающая строка новой строки. Я не уверен, как избавиться от него.

4b9b3361

Ответ 1

Я думаю, вы можете сделать

(replace-regexp-in-string "\n$" "" 
              (shell-command-to-string "git rev-parse --show-toplevel"))

Ответ 2

Если вы хотите удалить новую строку в самом конце вывода, используйте

(replace-regexp-in-string "\n\\'" "" 
  (shell-command-to-string "git rev-parse --show-toplevel"))

Принятый ответ также заменяет пары новых строк ("\n\n") на выходе одиночными новыми строками ("\n"), потому что $ соответствует в конце строки или после новой строки, тогда как \\' соответствует только в конце строки.

Ответ 3

Предполагая, что он хранится в переменной output-string, заключительный символ новой строки в конце может быть удален следующим образом:

(substring output-string 0 -1)

При использовании команды shell-command это будет выглядеть так:

(substring
  (shell-command-to-string "git rev-parse --show-toplevel")
  0 -1)