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

时间:2012-11-16 14:45:06

标签: shell child-process inter-process-communicat non-interactive

我想获得'gap'软件功能的结果。这是一个交互式命令行工具,主要面向从事群论相关主题研究的数学家。 文档/常见问题解答说明8.1: Can I call GAP functions from another programme?通常是不可能的。但是,将GAP作为子进程运行并使用管道,伪ttys,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的已接受答案不起作用。

1 个答案:

答案 0 :(得分:2)

通过间隙支持回答(使用间隙的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