%20interpretieren..png)
cat
hat zwei verschiedene Verhaltensweisen, je nachdem, ob die Eingabe eine Dateizeichenfolge ist. Ich muss verwenden, cat
um eine Datei an meinen PDF-Viewer (Zathura) weiterzuleiten. Der Dateiname basiert auf einer geänderten Zeichenfolge wie sed
folgt:
cat <(echo test.tex | sed 's/[^.]*$/pdf/') | zathura -
test.tex
Ich möchte, dass dieser Einzeiler einen Dateinamen- String konvertiert test.pdf
und ihn an Zathura weiterleitet, um die entsprechende Datei zu öffnen. Die obige Befehlszeile funktioniert nicht, da die cat
Eingabe als String und nicht als Datei interpretiert wird.
Offensichtlich,
echo test.tex | sed 's/[^.]*$/pdf/') | zathura
funktioniert nicht, deshalb versuche ich, damit herumzuspielen cat
.
Antwort1
Meinst du nicht:
cat $(echo test.tex | sed 's/[^.]*$/pdf/') | zathura -
Damit sed
ist das Ergebnis Ihres Arguments cat
und nicht dessen Standardeingabe.
Sie können auch Folgendes verwenden:
cat $(basename $file .tex).pdf | zathura -
oder
cat ${file%.*}.pdf | zathura -
Antwort2
Ich empfehle nicht, eine Datei STDIN
mit einem Dokumentbetrachter zu öffnen, der Funktionen wie automatische Dokumentaktualisierung oder SyncTeX bietet. Dadurch wird die Verbindung zwischen der Originaldatei und der Software unterbrochen, da die geöffnete Datei eine Kopie der Originaldatei ist. Die angezeigte Datei sieht tatsächlich so aus /tmp/zathura.stdin
: . Dies kann zu Sicherheitsproblemen führen und wenn die LaTeX-Quelldatei neu kompiliert wird, wird die Anzeige in der Software nicht aktualisiert.
Warum also die Mühe machen, cat
wenn Sie den Dateinamen einfach wie folgt als Argument übergeben können:
zathura $(basename file.tex .tex).pdf
oder mitsed
zathura $(echo file.tex | sed 's/[^.]*$/pdf/')