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には利用可能なコマンドの「キャッシュ」があり、自動的に更新されないように設定できます。

いくつかの愚かなライサーは、通常、nfsのパス条件やメモリ不足のシステム条件を防ぐことが賢明だと思います。私はoh-my-zshと人々がインストールして使用する素晴らしいプロンプトスタイル/設定が好きではありません。クソ過大広告ソフトウェア。

あなたの質問に対する答えは次のとおりです。

hash_list_allを設定解除していないことを確認してください(...)

zstyle ":completion:*:command" rehash 1

私の場合は、この回答で説明されているように上記のオプションを確認できます。

$ unsetopt | grep hash; echo ---; setopt | grep hash 
nohashcmds
nohashdirs
hashexecutablesonly
nohashlistall
---

もう1つの可能性は、IDEが期待したものとは異なり、環境が消去または初期化されることです。しかし、/usr/bin が PATH にないのはおかしいようです。新しいスクリプトを作成してIDEで実行したら、環境を印刷して前提を確認します。

env > /tmp/env-in-script-from-ide

おすすめ記事