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
答え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をインストールしたためです。
コメントを提供し、これをより明確にするのに役立つすべての人に感謝します。