Lassen Sie cat die Eingabe als Datei (nicht als Zeichenfolge) interpretieren.

Lassen Sie cat die Eingabe als Datei (nicht als Zeichenfolge) interpretieren.

cathat zwei verschiedene Verhaltensweisen, je nachdem, ob die Eingabe eine Dateizeichenfolge ist. Ich muss verwenden, catum eine Datei an meinen PDF-Viewer (Zathura) weiterzuleiten. Der Dateiname basiert auf einer geänderten Zeichenfolge wie sedfolgt:

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

test.texIch möchte, dass dieser Einzeiler einen Dateinamen- String konvertiert test.pdfund ihn an Zathura weiterleitet, um die entsprechende Datei zu öffnen. Die obige Befehlszeile funktioniert nicht, da die catEingabe 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 sedist das Ergebnis Ihres Arguments catund 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 STDINmit 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, catwenn 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/')

verwandte Informationen