A veces necesito escribir texto y luego canalizar ese texto a otro comando. Mi flujo de trabajo habitual es más o menos así:
vim
# I edit and save my file as file.txt
cat file.txt | pandoc -o file.pdf # pandoc is an example
rm file.txt
Encuentro esto engorroso y busco aprender scripts de bash. Me gustaría simplificar el proceso escribiendo un comando que abre un editor y cuando el editor cierra la salida del editor a stdout. Entonces podría ejecutar el comando como quickedit | pandoc -o file.pdf
.
No estoy seguro de cómo funcionaría esto. Ya escribí una función para automatizar esto siguiendo el flujo de trabajo exacto anterior más algunas adiciones. Genera una cadena aleatoria para actuar como un nombre de archivo y se la pasa a vim cuando se invoca la función. Cuando el usuario sale de vim guardando el archivo, la función imprime el archivo en la consola y luego lo elimina.
function quickedit {
filename="$(cat /dev/urandom | env LC_CTYPE=C tr -cd 'a-f0-9' | head -c 32)"
vim $filename
cat $filename
rm $filename
}
# The problem:
# => Vim: Warning: Output is not to a terminal
El problema que pronto encontré es que cuando hago algo como quickedit | command
vim en sí mismo no se puede usar como editor porque toda la salida está restringida a la tubería.
Me pregunto si hay alguna solución a esto, para poder canalizar la salida de mi quickedit
función. La alternativa subóptima es iniciar un editor separado, digamos texto sublime, pero realmente quiero permanecer en la terminal.
mktemp
lugar de reinventarlo de manera insegura.
:w !pandoc -o file.pdf
? (Nota: el espacio entrew
y!
es esencial.)