Como usar booleanos em casca de peixe?

3

Mudei para fish shell e fiquei feliz com isso. Eu não entendi como posso lidar com booleanos. Eu consegui escrever config.fish que executa tmux on ssh (veja: Como eu posso iniciar o tmux automaticamente na conexão fish shell enquanto conectando ao servidor remoto via ssh ), mas eu não estou feliz com a legibilidade do código e quero para saber mais sobre fish shell (eu já li o tutorial e examinei a referência). Eu quero que o código fique assim (eu sei que a sintaxe não está correta, eu só quero mostrar a idéia):

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

Eu sei que posso armazenar $status es e compará-los com test como números inteiros, mas acho que é feio e ainda mais ilegível. Portanto, o problema é reutilizar $status es e usá-los em if e test .

Como posso conseguir algo assim?

    
por rominf 27.03.2014 / 17:33

1 resposta

7

Você pode estruturar isso como uma cadeia if / else. É possível (embora difícil de controlar) usar begin / end para colocar uma instrução composta como uma condição 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

Um estilo mais agradável é modificadores booleanos. começo / fim ocupam o lugar dos parênteses:

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"

(O primeiro começo / fim não é estritamente necessário, mas melhora a clareza da IMO.)

O fatorar funções é uma terceira possibilidade:

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"
    
por 27.03.2014 / 18:42

Tags