.png)
cat
имеет два разных поведения в зависимости от того, является ли его вход строкой файла. Мне нужно использовать cat
для передачи файла в мой просмотрщик PDF (Zathura). Имя файла основано на измененной строке следующим sed
образом:
cat <(echo test.tex | sed 's/[^.]*$/pdf/') | zathura -
Я хочу, чтобы эта строка преобразовала строку имени файла test.tex
и test.pdf
передала ее в Zathura для открытия соответствующего файла. Приведенная выше командная строка не работает, поскольку cat
ввод интерпретируется как строка, а не как файл.
Очевидно,
echo test.tex | sed 's/[^.]*$/pdf/') | zathura
не работает, поэтому я пытаюсь поиграться с cat
.
решение1
Вы не имеете в виду:
cat $(echo test.tex | sed 's/[^.]*$/pdf/') | zathura -
Таким образом, результатом вашего ввода sed
является аргумент, cat
а не его стандартный ввод.
Вы также можете использовать:
cat $(basename $file .tex).pdf | zathura -
или
cat ${file%.*}.pdf | zathura -
решение2
Я не рекомендую открывать файл с STDIN
помощью просмотрщика документов, который предлагает такие функции, как автоматическое обновление документов или SyncTeX. Это нарушает связь между исходным файлом и программным обеспечением, поскольку открытый файл будет копией исходного файла. Отображаемый файл на самом деле будет чем-то вроде /tmp/zathura.stdin
. Это может привести к проблемам безопасности, и когда исходный файл LaTeX будет перекомпилирован, отображение в программном обеспечении не будет обновлено.
Так зачем же беспокоиться, cat
если можно просто передать имя файла в качестве аргумента следующим образом:
zathura $(basename file.tex .tex).pdf
или используяsed
zathura $(echo file.tex | sed 's/[^.]*$/pdf/')