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/')