Hacer que cat interprete la entrada como un archivo (no una cadena)

Hacer que cat interprete la entrada como un archivo (no una cadena)

cattiene dos comportamientos diferentes dependiendo de si su entrada es una cadena de archivo. Necesito usarlo catpara canalizar un archivo a mi visor de PDF (Zathura). El nombre del archivo se basa en una cadena modificada de sedla siguiente manera:

cat <(echo test.tex | sed 's/[^.]*$/pdf/') | zathura -

Quiero que esta línea convierta una cadena de nombre de archivo test.texy test.pdfla canalice a Zathura para abrir el archivo correspondiente. La línea de comando anterior no funciona porque la catentrada se interpreta como una cadena y no como un archivo.

Obviamente,

echo test.tex | sed 's/[^.]*$/pdf/') | zathura

no funciona, por eso trato de jugar con cat.

Respuesta1

¿No querrás decir:

cat $(echo test.tex | sed 's/[^.]*$/pdf/') | zathura -

De modo que el resultado de your sedsea un argumento caty no su entrada estándar.

También puedes usar:

cat $(basename $file .tex).pdf | zathura -

o

cat ${file%.*}.pdf | zathura -

Respuesta2

No recomiendo abrir un archivo STDINcon un visor de documentos que ofrezca funciones como actualización automática de documentos o SyncTeX. Al hacerlo, se rompe el vínculo entre el archivo original y el software, ya que el archivo abierto será una copia del archivo original. El archivo mostrado en realidad será algo así como /tmp/zathura.stdin. Esto puede provocar problemas de seguridad y, cuando se vuelve a compilar el archivo fuente de LaTeX, la visualización en el software no se actualizará.

Entonces, ¿por qué molestarse catcuando simplemente puede pasar el nombre del archivo como argumento de la siguiente manera?

zathura $(basename file.tex .tex).pdf

o usandosed

zathura $(echo file.tex | sed 's/[^.]*$/pdf/')

información relacionada