Como posso converter essa função bash para a casca de peixe

3

Estou experimentando o fish shell 2.0 para substituir o bash. Eu estou tentando converter a seguinte função bash para uma função de peixe, mas está me dando um inferno. Eu tenho várias funções similares, então se alguém puder me apontar na direção certa com um exemplo, eu ficaria muito grato

connect() {
    if [ "$2" != "" ]
    then
            ssh -ti ~/.ssh/work/id_rsa user@host$1.domain.com "sudo ssh $2"
    fi
    if [ "$2" == "" ]
    then
            ssh -ti ~/.ssh/work/id_rsa user@host$1.domain.com "sudo -i"
    fi
}

Tentei apenas substituir $ 1 e $ 2 por $ argv [1] e $ argv [2], mas ele se queixa de não conseguir localizar o fim do bloco. Eu sei que é porque o script de sintaxe é bem diferente em peixes. Eu tentei começar de uma função mais simples e tive problemas em descobrir como fazer uma coisa se 1 variável é passada, e outra coisa se 2 variáveis são passadas:

function testvarz
    switch "$argv[2]";
            case ""
                    echo "no second variable passed"
            case != ""
                    echo "second variable passed"
    end

end

mas isso não funciona, se você passar 2 variáveis ele não faz nada, se você passar 1 ele reclama

    
por MrSilver AG 08.06.2013 / 01:24

1 resposta

4

Aqui está uma função de trabalho que é semelhante à sua função de teste.

 function testvarz
      switch (count $argv)
          case 0
              echo 'zero'
          case 1
              echo "one $argv[1]"
          case 2
              echo "two $argv[1] $argv[2]"
          case '*'
              echo 'else'
      end
  end

Você pode usar uma estrutura semelhante para sua função connect .

A propósito, você deve usar similarmente $# em sua função Bash ao invés de tentar confiar em $2 sendo nulo. Você também pode usar uma instrução case no Bash.

    
por 08.06.2013 / 03:02