PATH 변수 외에 명령을 찾을 수 없음 오류의 다른 가능한 원인은 무엇입니까?

PATH 변수 외에 명령을 찾을 수 없음 오류의 다른 가능한 원인은 무엇입니까?

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

PDF 라텍스 PDF 라텍스

보관소 보관소

UrxVT 여기에 이미지 설명을 입력하세요.

답변3

@polemon이 그의 의견에서 제안한 것처럼 그 이유는 컨테이너 때문이라고 생각합니다. (자세한 내용은 다음을 참조하세요.https://www.redhat.com/en/topics/containers/whats-a-linux-container)

이는 컨테이너를 사용하여 애플리케이션을 실행하는 flatpak을 통해 vscode를 설치했기 때문입니다.

의견을 제공하고 이를 좀 더 명확하게 만드는 데 도움을 주신 모든 분들께 감사드립니다.

관련 정보