在鱼壳提示中测试RETVAL?

时间:2014-07-29 11:15:54

标签: shell fish

我正在尝试将我的bashrc配置转换为fish shell配置,我在提示符中有这一部分:

function fish_prompt
  ....

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

此配置导致错误:

test: Missing argument at index 2

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

1 个答案:

答案 0 :(得分: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