¿Cómo descartar stderr cuando se ejecuta una función de shell?

Pregunta:

Si corro

(setq some-variable (shell-command-to-string some-command))

… y la ejecución del comando en some-command da como resultado alguna salida enviada a stderr , esta salida stderr termina en some-variable .

¿Cómo puedo descartar la salida stderr , de modo que el resultado consista exclusivamente en la salida enviada a stdout ? (Mejor aún sería capturar las salidas stdout y stderr en variables separadas).

Tenga en cuenta que no es suficiente agregar algo como 2>/dev/null al comando en some-command , porque la salida stderr puede provenir de un archivo de inicialización de shell (por ejemplo, .bashrc ) y, por lo tanto, no sería capturada por 2>/dev/null redirección.

Respuesta:

Utilice el siguiente formulario en lugar de (shell-command-to-string some-command) :

(with-output-to-string
    (with-current-buffer
      standard-output
      (process-file shell-file-name nil '(t nil)  nil shell-command-switch some-command)))

Eso es esencialmente lo que hace shell-command-to-string con el único cambio que descarta stderr .

También puede sustituir el nil en '(t nil) por algún nombre de archivo para redirigir stderr a ese archivo.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım