現在、WindowsコンピュータのLinuxサブシステムであるUbuntu 20.04.2 LTSにWolframEngineをインストールしようとしています。これは最終的に私のWSLコマンドラインでWolframscriptを使用できるようになります。私はWolframScriptを次からダウンロードしました。ここ、問題なくインストールされました。ただし、テストしようとすると(例:run 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にインストールする必要があると思いました。そのため、出力プロンプトのリンクに従い、次のシェルスクリプトをダウンロードしました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
私のシステムがシェルスクリプトを実行できない理由はわかりません。 bashはUbuntuディストリビューションのシェルソルバーなので、それを使って実行しました。コマンドラインでWolframscriptを使用できるようにシステムでこのファイルを実行するにはどうすればよいですか?
ベストアンサー1
短い答え:
純粋なLinuxインストールでも動作は同じであるため、これは実際にはWSLの問題ではありません。インストーラスクリプトは、以下を取得するのではなく実行するように設計されています。
chmod +x WolframEngine_12.3.1_LINUX.sh
sudo ./WolframEngine_12.3.1_LINUX.sh
sudo
(通常のユーザーとして実行する場合は、インストーラのメッセージに従って)必要です。
説明する:
スクリプトには2つの部分が含まれています。
- 最初の部分はスクリプトです。
- 2番目の部分はインストール用のバイナリを含む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
このようにスクリプトを実行すると、シェルは終了しません(ソースをインポートするときのように)。実行されたスクリプトは独自のサブシェルを起動します。この場合、コマンドのexit
結果は次のようになります。スクリプトバイナリロードに達する前に終了してください。