如何从 shell 脚本调用 GAP 函数?

Posted

技术标签:

【中文标题】如何从 shell 脚本调用 GAP 函数?【英文标题】:How can I call GAP functions from a shell script? 【发布时间】:2012-11-16 14:45:05 【问题描述】:

我想得到GAP 软件的一个功能的结果。这是一个交互式命令行工具,主要供从事群论相关主题的数学家使用。 文档/常见问题解答关于8.1: Can I call GAP functions from another programme? 的状态通常是不可能的。但是,将 GAP 作为子进程运行并使用管道、伪 tty、UNIX FIFO 或其他类似设备与之通信是可以做到的。

使用名为 CrystCat(Crystallographic Groups Catalog)的包的示例会话如下所示:

$ gap
gap > LoadPackage( "CrystCat" );
gap > DisplaySpaceGroupType( "P1" );
#I     Space-group type (3,1,1,1,1); IT(1) = P1; orbit size 1; fp-free
gap > quit;
$ # exited 'gap' and back in my shell

由于我不熟悉这些技术,有人可以向我展示一个具有以下功能的最小示例:

$ ./script.sh "P1"
#I     Space-group type (3,1,1,1,1); IT(1) = P1; orbit size 1; fp-free
$

更新:这个question 接受的答案不起作用。

【问题讨论】:

考虑使用带有 GAP 接口的 sagemath.org 的 python。 【参考方案1】:

通过gap-support回答(使用gap的stdin读入能力)

#!/bin/sh

if [ "$#" != "1" ]; then
   echo "Usage: test.sh <string>"
   exit 1
fi;

gap -r -b -q << EOI
LoadPackage( "CrystCat" );
DisplaySpaceGroupType( "$1" );
EOI

它完全按照要求工作,即

$ ./script.sh P1
#I     Space-group type (3,1,1,1,1); IT(1) = P1; orbit size 1; fp-free

【讨论】:

以上是关于如何从 shell 脚本调用 GAP 函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在shell脚本里调用另一个shell脚本

如何从 unix shell 调用带有参数的子例程

如何在shell脚本中调用另一个shell的结果

如何从 python 代码调用 shell 脚本?

如何从需要 SUDO 的 php 调用 shell 脚本?

如何从 haskell 程序调用 bash 或 shell 脚本?