51 votes

Comment capturer la sortie standard d'une commande shell dans elisp ?

Je veux exécuter une commande shell dans Emacs et capturer la sortie complète dans une variable. Y a-t-il un moyen de le faire ? Par exemple, je voudrais pouvoir définir hello-string "hello" de la manière suivante :

(setq hello-string (capture-stdout-of-shell-command "/bin/echo hello"))

La fonction capture-stdout-of-shell-command existe-t-elle et, dans l'affirmative, quel est son vrai nom ?

83voto

Ise Wisteria Points 5852

Est-ce que shell-command-to-string votre objectif ?
Par exemple :

(shell-command-to-string "/bin/echo hello")

J'espère que ça aidera.

28voto

Chris McMahan Points 1032

J'ai une suggestion à faire qui prolonge la réponse d'Ise Wisteria. Essayez d'utiliser quelque chose comme ceci :

(setq my_shell_output
  (substring 
    (shell-command-to-string "/bin/echo hello") 
   0 -1))

Cela devrait définir la chaîne "hello" comme la valeur de my_shell_output, mais proprement. L'utilisation de (substring) élimine la fin de \n qui a tendance à se produire lorsque emacs appelle une commande shell. Cela me dérange dans les emacs fonctionnant sous Windows, et cela se produit probablement aussi sur d'autres plateformes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X