【问题标题】:maxima command line v5.43 is behaving differently than v5.41maxima 命令行 v5.43 的行为与 v5.41 不同
【发布时间】:2020-08-18 05:47:55
【问题描述】:

我最近将 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】:

    在查看 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=$1-$2.csv  # something I just made up
    cat << EOF > /tmp/foo.mac
    myinput: openr ("$f");
    /* etc etc */
    EOF
    

    【讨论】:

    • 感谢您的信息。我将能够使用这些信息来解决行为上的差异,并使两个版本的代码库相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    • 2016-10-13
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    相关资源
    最近更新 更多