$PATH 中的命令但无法运行并且“ln”链接在 Debian 12 上不起作用

$PATH 中的命令但无法运行并且“ln”链接在 Debian 12 上不起作用

计算机系统是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通过查看(以 shell 术语来说)$0 来确定你的 LaTeX 安装位置。当使用完整路径启动时,可以毫不费力地找出安装的其余部分/usr/local/texlive/2023/并找到所需的所有组件的正确版本。

但是有了你的符号链接,这就崩溃了:要么它根本找不到它需要的东西,要么如果你也安装了 Debian 12 的标准打包版本的 LaTeX,它可能会在 下搜索/usr,找到/usr/share/texlive然后尝试使用,/usr/share/texlive/tlpkg/TeXLive/TLUtils.pm/usr/local/texlive/2023/[...something...]/TLUtils.pm不是显然比 Debian 标准版本有更多的功能。

正如你所看到的:

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一开始避免了一个额外的 shell 进程使进程列表变得混乱,并"$@"导致给脚本的任何参数都被传递到真实的参数tlmgr而不进行任何更改。)

相关内容