Как использовать логические значения в панцире рыбы?

Как использовать логические значения в панцире рыбы?

Я перешел на fishshell и вполне доволен. Я не понял, как мне обрабатывать булевы значения. Мне удалось написать, config.fishчто выполняется tmuxна ssh(см.:Как автоматически запустить tmux в fish shell при подключении к удаленному серверу через ssh?) соединение, но меня не устраивает читаемость кода и я хочу узнать больше о fishоболочке (я уже прочитал учебник и просмотрел справочную информацию). Я хочу, чтобы код выглядел так (я знаю, что синтаксис неверный, я просто хочу показать идею):

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целыми числами, но я думаю, что это уродливо и еще более нечитаемо. Так что проблема в том, чтобы повторно использовать $statuses и использовать их в ifи test.

Как мне добиться чего-то подобного?

решение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"

Связанный контент