如何在 Fish shell 中使用布尔值?

如何在 Fish shell 中使用布尔值?

我切换到fishshell 并且对此非常满意。我不明白如何处理布尔值。我设法编写了config.fish执行的tmux代码ssh(参见:如何在通过 ssh 连接到远程服务器时在 Fish shell 中自动启动 tmux)连接,但我对代码的可读性不满意,并且想了解有关fishshell 的更多信息(我已经阅读了教程并浏览了参考资料)。我希望代码看起来像这样(我知道语法不正确,我只是想展示这个想法):

set PPID (ps --pid %self -o ppid --no-headers) 
if ps --pid $PPID | grep ssh 
    set attached (tmux has-session -t remote; and tmux attach-session -t remote) 
    if not attached 
        set created (tmux new-session -s remote; and kill %self) 
    end 
    if !\(test attached -o created\) 
        echo "tmux failed to start; using plain fish shell" 
    end 
end

我知道我可以存储$statuses 并将它们与test整数进行比较,但我认为它很丑陋,甚至更难以阅读。所以问题是重用es 并在和$status中使用它们。iftest

我怎样才能实现这样的目标?

答案1

您可以将其构造为 if/else 链。可以(尽管不方便)使用 begin/end 将复合语句作为 if 条件:

if begin ; tmux has-session -t remote; and tmux attach-session -t remote; end
    # We're attached!
else if begin; tmux new-session -s remote; and kill %self; end
    # We created a new session
else
    echo "tmux failed to start; using plain fish shell"
end

更好的风格是布尔修饰符。 begin/end 代替括号:

begin
    tmux has-session -t remote
    and tmux attach-session -t remote
end
or begin
    tmux new-session -s remote
    and kill %self
end
or echo "tmux failed to start; using plain fish shell"

(第一个开始/结束并不是严格必要的,但在我看来可以提高清晰度。)

分解函数是第三种可能性:

function tmux_attach
    tmux has-session -t remote
    and tmux attach-session -t remote
end

function tmux_new_session
    tmux new-session -s remote
    and kill %self
end

tmux_attach
or tmux_new_session
or echo "tmux failed to start; using plain fish shell"

相关内容