cat이 입력을 (문자열 대신) 파일로 해석하도록 합니다.

cat이 입력을 (문자열 대신) 파일로 해석하도록 합니다.

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

관련 정보