linux - mac - musicbrainz picard español
¿Cómo canalizar la entrada al sublimetexto en linux? (3)
¿Cómo recibo el texto de la entrada estándar en el editor de sublimetexto? Con vim funciona así:
echo "potato potato potato" | vim -
Lo mismo funciona con gedit, creando un nuevo documento con los contenidos.
Parece que el sublimetexto simplemente comienza a editar un archivo llamado "-" en una nueva pestaña, ¿hay algún otro truco de shell que podría funcionar?
La solución más sencilla si su instalación sublime no admite la apertura de STDIN (por ejemplo, la versión actual en Linux) es volcar la salida en un archivo temporal, abrir el archivo en sublime y luego eliminar el archivo. tosubl
un script llamado tosubl
en mi 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 puedes usarlo haciendo algo como esto:
$ ifconfig | tosubl
No sé Sublime Text, pero su problema debería ser genérico, ya que se aplica a cualquier programa que acepte un nombre de archivo como argumento, pero se niegue 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 de 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 un argumento al comando actual como resultado de la expansión. Si se utiliza el formulario> (lista), escribir en el archivo proporcionará información para la lista. Si se utiliza el formulario <(lista), el archivo pasado como argumento debe leerse para obtener el resultado de la lista.
Asumiendo que SomeProcess produce un resultado que le gustaría capturar en su editor:
sublimetext <(SomeProcess)
o:
SomeProcess | sublimetext <(cat)
Si cree que va a escribir esto a mano mucho, entonces es posible que desee poner el 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, por supuesto:
SomeProcess > /tmp/myoutput
sublimetext /tmp/myoutput
Usted puede encontrar vipe
de moreutils útil. Si ha set EDITOR=''subl --wait''
, puede simplemente:
echo ''potato potato potato'' | vipe