Linux에서 명령을 찾을 수 없는 이유는 무엇입니까? 게다가 거기엔 없나요 PATH
?
일부 배경 정보:
vscode에서 pdflatex를 실행하려고 할 때 문제가 발생합니다. vscode에서 pdflatex를 찾을 수 없습니다. PATH
설정이 잘못되었기 때문일 수 있습니다 . 문제를 즉시 해결할 수 없었기 때문에 pdflatex를 호출하는 쉘 스크립트를 실행하여 문제를 해결하려고 했습니다.
#!/bin/bash
export PATH=/usr/bin
pdflatex $@
또는
#!/bin/bash
/usr/bin/pdflatex $@
두 경우 모두 일반 터미널에서 실행될 때 스크립트가 예상대로 작동합니다. 하지만 vscode 인턴 터미널에서 실행하면 다음과 같이 표시됩니다.
pdflatex: command not found
내가 아는 한, 명령을 찾을 수 없는 유일한 방법은 명령이 없거나 PATH
절대 경로가 잘못된 경우입니다. 하지만 여기서는 그렇지 않은 것 같습니다. 그렇다면 명령을 검색하는 방법을 결정하는 다른 요소는 무엇입니까?
추가 정보(요청에 따라)
운영 체제: POP 운영 체제 21.04
vscode 터미널에서:
$ echo $PATH /app/bin:/usr/bin:/home/flo/.var/app/com.visualstudio.code
로컬 터미널에서:
$ echo $PATH /opt/anaconda3/bin:/opt/anaconda3/condabin:/home/flo/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin
와 같은 다른 명령
ls
도 디렉토리에 있으며 vscode 터미널 내에서 작동 할 수 있습니다/usr/bin
(또한 ) .ls
/usr/bin/ls
pdflatex의 속성:
$ ls -l /usr/bin/pdflatex lrwxrwxrwx 1 root root 6 Feb 17 2021 /usr/bin/pdflatex -> pdftex
또는
$file /usr/bin/pdflatex /usr/bin/pdflatex: symbolic link to pdftex
및 pdftex(pdflatex와 동일한 동작):
$ ls -l /usr/bin/pdftex -rwxr-xr-x 1 root root 2115048 Mar 13 2021 /usr/bin/pdftex
또는
$ file /usr/bin/pdftex /usr/bin/pdftex: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=88c89d7d883163b4544f9461668b73383e1ca04e, for GNU/Linux 3.2.0, stripped
다음 스크립트도 동일한 출력을 제공합니다.
#!/bin/bash pdflatex $@
원본 스크립트(편집 없이 복사됨)는 다음과 같습니다.
#!/bin/bash #export PATH=/usr/bin #printenv PATH pdflatex $@ #/usr/bin/pdflatex $@
다른 스크립트를 테스트하기 위해 여기 게시물에서 주석을 변경하고 관련 없는 줄을 제거했습니다.
/app/bin
하다아니요존재하다. (/app
존재하지 않는다)LaTeX Workshop 확장 내에서 vscode를 변경해 보았습니다
PATH
. 이것이 내 문제의 주요 원인일 가능성이 높습니다. 그러나 문제를 해결할 수도 없고 내 구성(LaTeX Workshop 확장에 대한)이 효과가 있는지 어떤 방식으로도 확인할 수 없습니다.makeTex.sh
스크립트( 내 래퍼 스크립트) 에 다음 줄을 추가할 때 :declare -p LD_LIBRARY_PATH declare -p LD_PRELOAD
출력은 다음과 같습니다. 로컬 터미널:
./makeTex.sh: line 4: declare: LD_LIBRARY_PATH: not found ./makeTex.sh: line 5: declare: LD_PRELOAD: not found
vscode 터미널:
declare -x LD_LIBRARY_PATH="/app/lib" ./makeTex.sh: line 5: declare: LD_PRELOAD: not found
vscode 1.57.1 (플랫팩을 통해 설치)을 사용할 때 문제가 발생합니다. 다른 버전의 vscode(최소 vscodium 1.60.1)도 작동합니다.아니요같은 행동을 보입니다.
답변1
흥미롭게도 저는 과도하게 구성된 zsh 환경(oh-my-zsh 사용)에 새 패키지를 설치한 후 새 명령을 찾을 수 없는 경험을 했습니다. 이것이 zsh의 기본 동작이 아니라는 것을 확인할 수 있습니다. 분명히 zsh에는 사용 가능한 명령의 "캐시"가 있으며 자동으로 새로 고치지 않도록 구성할 수 있습니다.
일부 어리석은 Ricer는 일반적으로 nfs의 경로 조건이나 메모리가 부족한 시스템 조건을 방지하는 것이 현명하다고 생각합니다. 나는 oh-my-zsh와 사람들이 설치하고 사용하는 멋진 프롬프트 스타일/구성을 좋아하지 않습니다. 빌어먹을 과대광고 소프트웨어.
귀하의 질문에 대한 답변은 다음과 같습니다.
hash_list_all을 설정 해제하지 않았는지 확인하세요(...)
zstyle ":completion:*:command" rehash 1
제 경우에는 이 답변에 설명된 대로 위의 옵션을 확인할 수 있습니다.
$ unsetopt | grep hash; echo ---; setopt | grep hash
nohashcmds
nohashdirs
hashexecutablesonly
nohashlistall
---
또 다른 가능성은 IDE에서 예상한 것과 다르게 환경이 지워지거나 초기화된다는 것입니다. 그러나 /usr/bin이 PATH에 없는 것이 이상해 보입니다. 새 스크립트를 생성하고 IDE에서 실행한 후 환경을 인쇄하여 가정을 확인합니다.
env > /tmp/env-in-script-from-ide
답변2
당신의 환경은 혼란스럽습니다.
내부 터미널에서 다음 명령을 실행하고 출력을 확인합니다(head로 경로 출력을 자를 필요는 없음). gzip 대신 pdflatex를 사용하거나 둘 다 사용해 보세요. 일반 터미널과 비주얼 코드 터미널의 출력이 다르다면 환경이 다르기 때문입니다.
Snap을 통해 시각적 코드를 설치했으며 제한적이거나 격리된 환경을 가지고 있는 것으로 추측됩니다.
$ env | grep ^PATH= | tr : \\n | head -n 3; echo; which gzip; gzip --version | head -n1 ; echo $SHELL
PATH=vendor/bin
node_modules/.bin
/home/jaroslav/bin
/bin/gzip
gzip 1.10
/bin/bash
내 환경에서는 완벽하게 작동합니다. 시각적 코드 터미널과 urxvt의 출력은 동일합니다.
$ env | grep ^PATH= | tr : \\n | head -n 3; echo; which pdflatex; pdflatex --version | head -n1 ; echo $SHELL
PATH=vendor/bin
node_modules/.bin
/home/jaroslav/bin
/usr/bin/pdflatex
pdfTeX 3.141592653-2.6-1.40.22 (TeX Live 2021 Gentoo Linux)
/bin/bash
답변3
@polemon이 그의 의견에서 제안한 것처럼 그 이유는 컨테이너 때문이라고 생각합니다. (자세한 내용은 다음을 참조하세요.https://www.redhat.com/en/topics/containers/whats-a-linux-container)
이는 컨테이너를 사용하여 애플리케이션을 실행하는 flatpak을 통해 vscode를 설치했기 때문입니다.
의견을 제공하고 이를 좀 더 명확하게 만드는 데 도움을 주신 모든 분들께 감사드립니다.