.png)
cat
tem dois comportamentos diferentes dependendo se sua entrada é uma string de arquivo. Preciso usar cat
para canalizar um arquivo para meu visualizador de PDF (Zathura). O nome do arquivo é baseado em uma string modificada com sed
o seguinte:
cat <(echo test.tex | sed 's/[^.]*$/pdf/') | zathura -
Eu quero que este liner converta uma string de nome de arquivo test.tex
e test.pdf
canalize-a para Zathura para abrir o arquivo correspondente. A linha de comando acima não está funcionando porque a cat
entrada é interpretada como uma string e não como um arquivo.
Obviamente,
echo test.tex | sed 's/[^.]*$/pdf/') | zathura
não está funcionando, é por isso que tento mexer com cat
.
Responder1
Você não quer dizer:
cat $(echo test.tex | sed 's/[^.]*$/pdf/') | zathura -
Para que o resultado do seu sed
seja um argumento cat
e não o seu stdin.
Você também pode usar:
cat $(basename $file .tex).pdf | zathura -
ou
cat ${file%.*}.pdf | zathura -
Responder2
Não recomendo abrir um arquivo STDIN
com um visualizador de documentos que ofereça recursos como atualização automática de documentos ou SyncTeX. Isso quebra o vínculo entre o arquivo original e o software, pois o arquivo aberto será uma cópia do arquivo original. O arquivo exibido será algo como /tmp/zathura.stdin
. Isso pode levar a problemas de segurança e quando o arquivo fonte LaTeX for recompilado, a exibição no software não será atualizada.
Então, por que se preocupar cat
quando você pode simplesmente passar o nome do arquivo como argumento da seguinte maneira:
zathura $(basename file.tex .tex).pdf
ou usandosed
zathura $(echo file.tex | sed 's/[^.]*$/pdf/')