maxim命令行v5.43的行为与v5.41不同

问题描述 投票:1回答: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()$,但命令的回声并未被终止符$抑制。

我试图阅读文档以查找有关此的任何信息,但没有发现任何明显的问题。我的目标是安静地执行传入的命令并仅打印(最后)命令的输出。对此表示感谢。

command-line version echo maxima suppression
1个回答
2
投票

[在查看Git日志时,似乎在提交fa97979中更改了--run-string(即-r)的行为。因此,就其价值而言,当前行为被认为是正确的。也就是说,要解决(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
© www.soinside.com 2019 - 2024. All rights reserved.