在鱼壳中,很难找到条件语法。有没有人有解释如何编写if,withs和ors的链接?
我特别想编写
if not $status
do a command
end
要执行的命令时,先前的命令返回非成功。我怎么做?
在鱼壳中,很难找到条件语法。有没有人有解释如何编写if,withs和ors的链接?
我特别想编写
if not $status
do a command
end
要执行的命令时,先前的命令返回非成功。我怎么做?
参见http://fishshell.com/docs/current/commands.html#if和http://fishshell.com/docs/current/tutorial.html#tut_conditionals。
鱼的,如果结构是这样的:
if COMMAND
# do something if it succeeded
else
# do something if it failed ($status != 0)
end
再就是也not
,and
和or
命令,你可以像使用
if not COMMAND1; or COMMAND2
# and so on
如果你真的想测试一个变量(例如$状态),则需要使用test
作为命令,如
if test $status -eq 0
请记住,每个命令后$状态会发生变化,所以如果您需要使用早期命令的状态(常见于提示),您需要执行Joachim Pileborg所说的操作,并将其保存到另一个变量中。
此外,test
有引号的一些问题(因为它是鱼的少数地区之一,坚持POSIX) - 如果test $foo -eq 0
$ foo是不确定的,测试将错误出来,如果在test -n $foo
,未定义测试将是真实的(因为POSIX要求用一个参数进行测试是正确的)。
一点题外话,在2.3.0之前版本中的鱼,你需要与and
或or
添加begin
和end
周围的条件,因为它是古怪的解释。
所以你必须做
如果开始COMMAND;或COMMAND2;结束 #做点事状态= 0
我使用状态变量在提示中显示它,如果它不为零。对于我使用下面的函数:
function __pileon_status_prompt
set -l __status $status
if test $__status != 0
printf '[%s%s%s]' (set_color red) $__status (set_color normal)
end
end
正如你可以看到我设置一个局部变量的$status
值和检查,在条件变量。
谢谢。这是“推荐”的方式吗? – pitosalas
最短的短形式是
the_previous_command; or do_a_command
# ..................^^^^^
假设您在$status
从“the_previous_command”获得
的可能的复制[如何获得前一个命令的状态在鱼脚本](http://stackoverflow.com/questions/34721446/how-to-get-the-status-of-previous-command-in-fish-script) – faho
不是一个dup。问题不在于如何获得状态,而在于如何根据状态最佳地分配代码。 – pitosalas