1

我最近将 maxima 从 5.41.0 升级到 5.43.2,它破坏了我的代码。我找不到在两个版本中都以相同方式工作的解决方案。这是我正在执行的简化命令行示例:

在版本 5.41.0 中:

user@system:~> maxima -version
Maxima 5.41.0
user@system:~>  maxima --very-quiet -r 'display2d: false$ leftjust: true$ ratprint: false$ dispflag: false$      is(equal((a+b)**2 = (a**2 + b**2 + 2*a*b), (a+b)*(a+b) = (a**2 + b**2 + 2*a*b))); ttyoff:true$ quit()$'
true
user@system:~>

在版本 5.43.2 中:

user@system:~> maxima -version
Maxima 5.43.2
user@system:~>  maxima --very-quiet -r 'display2d: false$ leftjust: true$ ratprint: false$ dispflag: false$      is(equal((a+b)**2 = (a**2 + b**2 + 2*a*b), (a+b)*(a+b) = (a**2 + b**2 + 2*a*b))); ttyoff:true$ quit()$'
display2d:false
leftjust:true
ratprint:false
dispflag:false
is(equal((a+b)^2 = a^2+b^2+2*a*b,(a+b)*(a+b) = a^2+b^2+2*a*b))
true
ttyoff:true

有两个问题 (1) v5.43.2 中的命令在完成后没有退出 maxima 以返回 shell 命令提示符,而在 v5.41.0 中,它退出 maxima 并返回到 shell 命令提示符。(2) 所以,我添加了quit()$,但命令的回显没有被终止符$ 抑制。

我试图阅读文档以查找有关此的任何信息,但没有看到任何明显的信息。我的目标是安静地执行传入的命令并仅打印(最后一个)命令的输出。非常感谢您对此事的任何帮助。

4

1 回答 1

2

在查看 Git 日志时,似乎--run-string(ie, -r) 的行为在提交 fa97979 中发生了更改。因此,就其价值而言,当前的行为被认为是正确的。也就是说,要解决 (1),您可以尝试使用该--batch-string选项而不是--run-string.

关于(2),虽然美元符号抑制了输出,但输入仍然回显,这就是您所看到的。我也不知道抑制输入的方法。在这一点上,我可以看到几种可能的方法。

一种是省略--very-quiet,以便获得输入和输出标签。然后 grep 输出标签的输出,或者更准确地说,grep 输出标签后跟零个或多个没有标签的行(以捕获多行输出)。

另一种方法是忘记标签并说出with_stdout("/tmp/foo.out", print(...))您在哪里打印与稍后处理相关的内容,然后转储文件/tmp/foo.out或之后调用的任何内容。这有点笨拙,但可能更容易在输出文件中获得您想要的内容。

我有时会创建看起来像的 bash 脚本

cat << EOF > /tmp/foo.mac
someflag: true;
somevar: 1234;
foo: expand (something (something));
EOF
maxima --batch=/tmp/foo.mac

所以 bash 脚本创建了 Maxima 程序,然后 Maxima 执行它。如果我想在 Maxima 程序中使用 bash 变量(例如文件名或其他东西),这将特别有用,例如

f=$1-$2.csv  # something I just made up
cat << EOF > /tmp/foo.mac
myinput: openr ("$f");
/* etc etc */
EOF
于 2020-05-04T03:32:17.993 回答