.png)
cat
tiene dos comportamientos diferentes dependiendo de si su entrada es una cadena de archivo. Necesito usarlo cat
para canalizar un archivo a mi visor de PDF (Zathura). El nombre del archivo se basa en una cadena modificada de sed
la siguiente manera:
cat <(echo test.tex | sed 's/[^.]*$/pdf/') | zathura -
Quiero que esta línea convierta una cadena de nombre de archivo test.tex
y test.pdf
la canalice a Zathura para abrir el archivo correspondiente. La línea de comando anterior no funciona porque la cat
entrada 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 sed
sea un argumento cat
y 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 STDIN
con 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 cat
cuando 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/')