我目前正在尝试将 WolframEngine 安装到 Ubuntu 20.04.2 LTS,这是我的 Windows 计算机上的 Linux 子系统。这最终是为了能够在我的 WSL 命令行中使用 Wolframscript。我已经从以下位置下载了 WolframScript这里,并且安装没有任何问题。但是,当我尝试测试它时(例如运行wolframscript -code 2+2
),系统会提示我以下输出:
A WolframKernel location could not be determined.
Use -configure to set WOLFRAMSCRIPT_KERNELPATH.
Alternatively, export WolframKernel=/yourpath/WolframKernel.
If you have no Wolfram product currently installed,
the free Wolfram Engine for developers can be downloaded
at https://www.wolfram.com/engine/.
事实上,我的计算机上确实有 Wolfram 的许可内核,但由于它在 Windows 上运行,我想我应该将 WolframEngine 安装到我的 WSL 中。因此,我按照输出提示中的链接下载了标题为:的 shell 脚本WolframEngine_12.3.1_LINUX.sh
。我尝试运行此脚本(从系统中的多个位置),但每次运行source WolframEngine_12.3.1_LINUX.sh
.我总是得到输出
bash: source: WolframEngine_12.3.1_LINUX.sh: cannot execute binary file
我不确定为什么我的系统无法运行 shell 脚本。我使用 bash 运行它,因为它是我的 Ubuntu 发行版的 shell 解释器。如何让我的系统运行此文件,以便我可以从命令行开始使用 Wolframscript?
答案1
简短回答:
这并不是真正的 WSL 问题,因为在纯 Linux 安装上的行为是相同的。安装程序脚本旨在执行而不是获取:
chmod +x WolframEngine_12.3.1_LINUX.sh
sudo ./WolframEngine_12.3.1_LINUX.sh
您将需要sudo
(如果您尝试以普通用户身份运行它,则根据安装程序消息)。
解释:
该脚本包含两部分:
- 第一部分是脚本
- 第二部分是 tarball,包括用于安装的二进制文件
开头的脚本会自行读取、解压,然后执行二进制安装程序。
要了解为什么这在获取源时不起作用,您可以通过使用文本和二进制创建您自己的脚本来重现此场景:
创建一个文件dont_source_me.sh
:
#!/usr/bin/bash
echo Hello
exit
然后:
> bash # start a subshell
> source dont_source_me.sh
Hello
# Note that the subshell has exited since sourcing causes all commands to be executed within the current shell
> cat /usr/bin/ls >> dont_source_me.sh
> source dont_source_me.sh
bash: .: dont_source_me.sh: cannot execute binary file
> chmod +x dont_source_me.sh
> ./dont_source_me.sh
Hello
请注意,当以这种方式执行脚本时,shell 不会退出(就像获取源时一样)。执行的脚本启动其自己的子 shell。在这种情况下的命令exit
只是导致脚本在到达二进制负载之前退出。