Fish Shell에서 부울 값을 사용하는 방법은 무엇입니까?

Fish Shell에서 부울 값을 사용하는 방법은 무엇입니까?

쉘로 바꿨 fish는데 아주 만족스럽습니다. 부울 값을 처리하는 방법을 이해하지 못합니다. config.fish실행되는 tmux코드를 작성했습니다 ssh(참조:SSH를 통해 원격 서버에 연결할 때 Fish Shell에서 tmux를 자동으로 시작하는 방법) 연결이 가능하지만 코드의 가독성이 만족스럽지 않고 쉘에 대해 더 알고 싶습니다 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정수와 비교할 수 있다는 것을 알고 있지만 보기 흉하고 읽기가 더 어렵다고 생각합니다. 따라서 문제는 es를 재사용하고 $statusand에서 사용하는 것입니다.iftest

어떻게 하면 그러한 목표를 달성할 수 있습니까?

답변1

if/else 체인으로 구성할 수 있습니다. (불편하긴 하지만) 다음과 같은 조건처럼 복합문으로 시작/끝을 사용하는 것이 가능합니다:

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
    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"

관련 정보