计算机系统是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
而不进行任何更改。)