コンピュータシステムはDebian 12です。 LaTeXを更新する必要があるため、コマンドを試しsudo tlmgr update --all
ましたsudo: tlmgr: command not found
。しかし、which tlmgr
帰って/usr/local/texlive/2023/bin/x86_64-linux/tlmgr
本当にsudo /usr/local/texlive/2023/bin/x86_64-linux/tlmgr update --all
働いています。しかしsudo echo $PATH
返された
/home/usr1/.local/bin:/usr/local/texlive/2023/bin/x86_64-linux:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
含まれているのになぜ返されるのか/usr/local/texlive/2023/bin/x86_64-linux:
理解できません。sudo tlmgr update --all
sudo: tlmgr: command not found
sudo ln -s /usr/local/texlive/2023/bin/x86_64-linux/tlmgr /usr/bin/tlmgr
次のようにシンボリックリンクを作成しましたが、sudo tlmgr update --all
返されます。
"wndws" is not exported by the TeXLive::TLUtils module
Can't continue after import errors at /usr/bin/tlmgr line 100.
確認してみるとls -l /usr/bin/tlmgr1
結果が出ましたlrwxrwxrwx 1 root root 46 Nov 2 11:30 /usr/bin/tlmgr -> /usr/local/texlive/2023/bin/x86_64-linux/tlmgr
。そうだね。
なぜ追加する必要があり、tlmgr
なぜ/usr/bin/
動作しないのですか sudo tlmgr update --all
?
答え1
明らかに/usr/local/texlive/2023/bin/x86_64-linux/tlmgr
$ 0を(シェル用語で)見て、LaTeXのインストール場所を決定します。フルパスで実行すると、インストールの残りの部分を特定し、必要な/usr/local/texlive/2023/
すべてのコンポーネントの正しいバージョンを見つけるのは簡単です。
しかし、シンボリックリンクを使用すると、これは崩れます。必要なものが見つからない場合、またはDebian 12の標準パッケージバージョンのLaTeXがインストールされている場合は、明らかに多くのものを探すのではなく、検索して見つけて使用しようと/usr
する/usr/share/texlive
ことができます。 Debianの標準バージョンよりも機能が改善されました。/usr/share/texlive/tlpkg/TeXLive/TLUtils.pm
/usr/local/texlive/2023/[...something...]/TLUtils.pm
あなたが見たように:
grep wndws /usr/share/texlive/tlpkg/TeXLive/TLUtils.pm
結果は生成されなかったため、明らかに何もインポートしようとしませんwndws
。tlmgr
一般的に言って、自分だけのバッグを作るのではなく、必ず必要な場合でなければ*.deb
バッグに物を入れないでください。/usr/bin/
代わりに/usr/local/bin
。
この特別な場合は、tlmgr
シンボリックリンクの代わりに単純なラッパースクリプトを使用する必要があります。なぜなら、シンボリックリンクが始まるパスに敏感であるからです。したがって、/usr/local/bin/tlmgr
次のように作成します。
#!/bin/sh
exec /usr/local/texlive/2023/bin/x86_64-linux/tlmgr "$@"
その後、実行可能にするために使用しますchmod a+x /usr/local/bin/tlmgr
。
(exec
これは最初にプロセスリストを複雑にする追加のシェルプロセスを防ぎ、スクリプトに与えられた"$@"
すべての引数がtlmgr
変更なしで実際の引数に渡されるのを防ぎます。)