Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

368
Vistas
¿Cómo canalizar la entrada a sublimetext en Linux?

¿Cómo recibo texto de stdin en sublimetext editor? Con vim funciona así:

 echo "potato potato potato" | vim -

Lo mismo funciona con gedit, creando un nuevo documento con los contenidos.

Sublimetext parece comenzar a editar un archivo llamado "-" en una nueva pestaña, ¿hay algún otro truco de shell que pueda funcionar?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Suponiendo que Sublime aún no admita la apertura de STDIN, una solución sencilla es volcar la salida en un archivo temporal, abrir el archivo en sublime y luego eliminarlo. Digamos que crea un script llamado tosubl en su directorio bin de la siguiente manera:

 #!/bin/bash TMPDIR=${TMPDIR:-/tmp} # default to /tmp if TMPDIR isn't set F=$(mktemp $TMPDIR/tosubl-XXXXXXXX) cat >| $F # use >| instead of > if you set noclobber in bash subl $F sleep .3 # give subl a little time to open the file rm -f $F # file will be deleted as soon as subl closes it

Entonces podrías usarlo haciendo algo como esto:

 $ ps | tosubl

Pero una solución más eficiente y confiable sería usar Process Substitution si su shell lo admite (probablemente lo haga). Esto elimina los archivos temporales. Aquí está con bash:

 tosubl() { subl <(cat) } echo "foo" | tosubl

Estoy bastante seguro de que de alguna manera puede eliminar el uso de cat en esa función donde está transfiriendo bits de forma redundante de stdin a stdout, pero la sintaxis para hacerlo en ese contexto se me escapa en este momento.

over 4 years ago · Santiago Trujillo Denunciar

0

No conozco Sublime Text, pero su problema debería ser genérico en el sentido de que se aplica a cualquier programa que acepte un nombre de archivo como argumento, pero se niega a leer desde la entrada estándar.

Afortunadamente, Bash le permite canalizar la salida estándar de un proceso a algún tipo de archivo temporal y luego pasar el nombre de ese archivo a otro proceso.

De man bash :

La sustitución de procesos se admite en sistemas que admiten canalizaciones con nombre (FIFO) o el método /dev/fd para nombrar archivos abiertos. Toma la forma de <(lista) o >(lista). La lista de procesos se ejecuta con su entrada o salida conectada a un FIFO o algún archivo en /dev/fd. El nombre de este archivo se pasa como argumento al comando actual como resultado de la expansión. Si se usa el formulario >(lista), escribir en el archivo proporcionará entrada para la lista. Si se usa la forma <(lista), el archivo pasado como argumento debe leerse para obtener la salida de lista.

Suponiendo que SomeProcess produzca una salida que le gustaría capturar en su editor:

 sublimetext <(SomeProcess)

o:

 SomeProcess | sublimetext <(cat)

Si cree que escribirá esto a mano mucho, entonces puede poner sublimetext <(cat) en un script de shell o alias.

En caso de que su sistema operativo no admita la sustitución de procesos, siempre puede especificar un archivo temporal usted mismo, por supuesto:

 SomeProcess > /tmp/myoutput sublimetext /tmp/myoutput
over 4 years ago · Santiago Trujillo Denunciar

0

Puede encontrar vipe de moreutils útil. Si configuró EDITOR='subl --wait' , simplemente puede:

 echo 'potato potato potato' | vipe
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda