GNU/Linux >> Znalost Linux >  >> Linux

Jak používat booleovské hodnoty v rybí skořápce?

Přešel jsem na fish shell a docela spokojený s ním. Nechápal jsem, jak zvládnu booleany. Podařilo se mi napsat config.fish který spouští tmux na ssh (viz:Jak mohu automaticky spustit tmux v rybím shellu při připojení ke vzdálenému serveru přes ssh) připojení, ale nejsem spokojen s čitelností kódu a chci se dozvědět více o fish shell (už jsem četl tutoriál a prohlédl jsem si reference). Chci, aby kód vypadal takto (vím, že syntaxe není správná, chci jen ukázat myšlenku):

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

Vím, že mohu uložit $status es a porovnejte je s test jako celá čísla, ale myslím, že je to ošklivé a ještě více nečitelné. Problém je tedy znovu použít $status es a použijte je v if a test .

Jak mohu něčeho takového dosáhnout?

Přijatá odpověď:

Můžete to strukturovat jako řetězec if/else. Je možné (i když nepraktické) použít begin/end k zadání složeného příkazu jako podmínky 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

Hezčí styl jsou booleovské modifikátory. začátek/konec nahradí závorku:

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"

(První začátek/konec není nezbytně nutný, ale zlepšuje přehlednost IMO.)

Třetí možností je rozdělení funkcí:

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"

Linux
  1. Jak používat Tmux + Cheat Sheet

  2. Jak nainstaluji Fish Shell na AWS Linux

  3. Jak obnovit shell po odpojení

  1. Jak používat příkaz Linux Rsync (vzdálená synchronizace).

  2. Jak používat aliasy shellu v Linuxu

  3. Jak používat příkaz su přes adb shell?

  1. Jak používat možnosti vzdáleného přístupu GNOME Boxes

  2. Jak používat SFTP k přenosu souborů

  3. Jak používat aplety indikátorů v prostředí GNOME