maxima 命令行 v5.43 的行为与 v5.41 不同
maxima command line v5.43 is behaving differently than v5.41
我最近将 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()$ 但是命令的回显没有被终止符 $.
抑制
我试图阅读文档以找到关于此的任何信息,但没有看到任何明显的信息。我的 objective 安静地执行传入的命令并仅打印(最后一个)命令的输出。非常感谢在此问题上的任何帮助。
在查看 Git 日志时,似乎 --run-string
(即 -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=-.csv # something I just made up
cat << EOF > /tmp/foo.mac
myinput: openr ("$f");
/* etc etc */
EOF
我最近将 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()$ 但是命令的回显没有被终止符 $.
抑制我试图阅读文档以找到关于此的任何信息,但没有看到任何明显的信息。我的 objective 安静地执行传入的命令并仅打印(最后一个)命令的输出。非常感谢在此问题上的任何帮助。
在查看 Git 日志时,似乎 --run-string
(即 -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=-.csv # something I just made up
cat << EOF > /tmp/foo.mac
myinput: openr ("$f");
/* etc etc */
EOF