"Shell" (外部计算系统)

更多信息

  • macOS 和 Linux 平台支持大部分 shell,包括 shbashzshcsh. 而 Windows 则支持 Windows 命令提示符和 PowerShell.

ExternalEvaluate 用法

  • ExternalEvaluate["Shell",code] 在操作系统 shell 中执行代码字符串并以 Wolfram 语言表达式的形式返回结果.
  • ExternalEvaluate["Shell"form,code] 执行命令字符串并以指定 form 的形式返回结果. form 可能的规格有 "Expression""StandardOutput""StandardError""ExitCode""Association".

使用说明

  • 字符串模板 (<**>) 可用于计算并将 Wolfram 语言表达式插入 shell 代码字符串.

范例

打开所有单元关闭所有单元

基本范例  (2)

用默认 shell 运行命令并返回结果:

若命令 "ExitCode" 非零,则会返回一个 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)

Specifying a "ReturnType" in the command overrides the "ReturnType" for the session:

"TemplateArguments"  (2)

运行命令时可内嵌一个 TemplateExpression

可用 "TemplateArguments" 填充 TemplateSlot

如果需要多个参数,可以使用 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 找出机器中所有可用的运算器:

"Evaluator" 在你的机器上手动指定一个 shell:

Powershell.exe 在 Windows 系统中是一个有效 "Evaluator"

RunProcess 也可用于执行 shell 命令,但并不会交互式打印输出:

可能存在的问题  (2)

若程序要求输入,则 ExternalEvaluate 无法中断:

当运行要求用户输入的外部命令时,建议将其在非交互模式下运行:

ExternalEvaluate 实时打印输出:

$Output 可用于抑制 Print 输出: