在 WSL 上安装 WolframEngine。 shell脚本不会运行

在 WSL 上安装 WolframEngine。 shell脚本不会运行

我目前正在尝试将 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只是导致脚本在到达二进制负载之前退出。

相关内容