"Shell" (外部評価システム)

詳細

  • macOSおよびLinuxプラットフォームでは,shbashzshcshを含むほとんどのシェルがサポートされる.Windowsでは,WindowsコマンドプロンプトとPowerShellがサポートされる.

ExternalEvaluateの使用法

  • ExternalEvaluate["Shell",code] はオペレーティングシステムのシェルでコマンド列を実行し,Wolfram言語式として結果を返す.
  • ExternalEvaluate["Shell"form,code] はコマンド列を実行し,指定された form で結果を返す.form には"Expression""StandardOutput""StandardError""ExitCode""Association"が指定できる.

使用法

  • 列のテンプレート(<**>)は,Wolfram言語の式を評価したりシェルのコード列に挿入したりするのに使うことができる.

例題

すべて開くすべて閉じる

  (2)

デフォルトのシェルでコマンドを実行して結果を返す:

コマンド"ExitCode"が0でない場合,Failureオブジェクトが返される:

>とタイプして,ExternalEvaluateを使って評価を行うShellコードのセルを取得する:

echo $(date)

Fileラッパーを使ってファイルに含まれるコードを実行する:

Unixシステムの場合,ファイルが実行可能であることを確認する:

CloudDeployを使ってコードを配備し,CloudObjectから直接コードを実行する:

URLラッパーを使ってオンラインでホストされたコードを直接実行する:

スコープ (20)

セッションを開始する:

コマンドを実行して結果を返す:

結果から"ExitCode"を抽出する:

結果からもとのコマンドを抽出する:

結果から"StandardOutput""StandardError"を抽出する:

セッションを終了する:

"ReturnType"を使うと異なる戻り値の型を指定することができる:

セッションオプション  (10)

"ReturnType"  (3)

Shellシステムでは,デフォルトの戻り型は"Expression"である:

"Expression"戻り型では,結果は終了コードによってSuccessFailureのどちらかになる:

特性"StandardOutput""StandardError""ExitCode"を使うと,プログラムの出力についての追加情報を抽出することができる:

"ReturnType"で取ることのできる値は"Expression""StandardOutput""StandardError""ExitCode"である:

Ruleを使うとすぐに"ReturnType"を指定することができる:

Evaluator"  (2)

指定された"Evaluator"を使ってコードを評価する:

Windowsでは,以下のようにしてcmd.exeを使うコマンドを実行する:

Windows PowerShellでコマンドを実行するためには,以下を使う:

"SessionProlog"  (2)

"SessionProlog"を使って,セッションの初めに副作用を実行する:

外部セッションを開始し,初期化ファイルをインポートする:

"SessionEpilog"  (1)

"SessionEpilog"を使って,セッションの最後に副作用を実行する:

"Prolog"  (1)

"Prolog"を使って,それぞれの評価の前に副作用を実行する:

"Epilog"  (1)

"Epilog"を使ってそれぞれの評価の後に副作用を実行する:

コマンドオプション  (8)

"Command"  (5)

文字列が与えられるとコマンドは直接実行される:

上記は次の形式を使ったコマンドに等しい:

スクリプトを含むファイルを作成する:

Unixシステムでは,ファイルが実行可能であることを確認する:

Fileラッパーを使ってファイルからコードを実行する:

上記は次の形式を使ったコマンドに等しい:

URLラッパーを使って,オンラインでホストされるコードを直接実行する:

上記は次の形式を使ったコマンドに等しい:

CloudObjectにコードを置く:

クラウドから直接評価する:

上記は次の形式を使ったコマンドに等しい:

"ReturnType"  (1)

コマンドで"ReturnType"を指定すると,セッションの"ReturnType"が上書きされる:

"TemplateArguments"  (2)

コマンドを実行するとき,TemplateExpressionを行内に埋め込むことができる:

"TemplateArguments"を使ってTemplateSlotを明示的に埋めることができる:

2個以上の引数が必要な場合はListを使うことができる:

テンプレートスロットに名前を付け,Associationを使うと,テンプレートに名前付きの引数を渡すことができる:

アプリケーション  (3)

ローカルネットワークアドレスを取得する:

ifconfig en0 | awk '$1 == "inet" {print $2}'

Spotlightを使って,Mac上の特定のファイルを検索する:

mdfind PersonalNotebook

開いているファイルの中で大きいもの10個を表示する:

lsof / | awk '{ if($7 > 1048576) print $7/1048576 "MB" " " $9 " " $1 }' | sort -n -u | tail

ローカルのGitリポジトリが最新であることを確認する関数を作成する:

関数を使う:

Shellを使ってGitリポジトリのダウンロードを自動化し,ソースからプログラムを構築してそのプログラムを実行する:

特性と関係  (2)

FindExternalEvaluatorsを使って,使用中のマシンで利用できるEvaluatorsを見付ける:

"Evaluator"を使って,マシンのシェルを手動で指定する:

Windowsシステムでは,Powershell.exeは有効な"Evaluator"である:

RunProcessを使ってもシェルコマンドを実行することができるが,インタラクティブな出力はしない:

考えられる問題  (2)

プログラムが入力を求めている場合,ExternalEvaluateは妨げることができない:

ユーザの入力を必要とする外部コマンドを実行しているとき,非インタラクティブモードで実行することをお勧めする:

ExternalEvaluateはリアルタイムで出力している:

$Outputを使うとPrint出力を非表示にすることができる: