shell - 在 Fish shell 提示符中测试 RETVAL?

标签 shell fish

我正在尝试将 bashrc 配置转换为 Fish shell 配置,并且提示中包含此部分:

function fish_prompt
  ....

  if [ $RETVAL -ne 0 ]
    printf "✘"
  else
    printf "✓"
  end
  ....
end

此配置会导致错误:

test: Missing argument at index 2

有人可以向我解释一下,这里出了什么问题吗?

最佳答案

RETVAL 未设置:

$ set -e RETVAL
$ if [ $RETVAL -ne 0 ]; echo foo; end
test: Missing argument at index 2
$ set RETVAL 1
$ if [ $RETVAL -ne 0 ]; echo foo; end
foo

如果您想抑制错误消息,请测试该变量是否存在。另外,使用fish的内置test而不是外部[

$ set -e RETVAL
$ if begin; set -q RETVAL; and test $RETVAL -ne 0; end; echo foo; else; echo bar; end
bar
$ set RETVAL 1
$ if begin; set -q RETVAL; and test $RETVAL -ne 0; end; echo foo; else; echo bar; end
foo

实际上,这可能更整洁:

if test -n "$RETVAL" -a "$RETVAL" -ne 0; echo foo; end

关于shell - 在 Fish shell 提示符中测试 RETVAL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25014002/

相关文章:

bash - 如果字符出现少于 20 次,则从列中删除字符

fish - `bind` 不运行用户定义函数

macos - 在Mac上的iterm2上,需要做些什么调整才能使ssh://user@machine.com URL与fish一起使用?

fish - 一个 fish 文件中的多种功能

shell - pdftk中无法旋转

android - 如何通过 ADB shell 广播带有附加功能的 Intent ?

bash - 正确搜索和替换源代码的最简单方法

linux - 在 linux 中更改符号链接(symbolic link)的目标而不更改其名称

string - 如何在 fish shell 中的字符串中有换行符?

regex - unix:如何判断字符串是否与正则表达式匹配