Aguarde a entrada do usuário

0

Estou criando uma pequena função para um processo que tenho de repetir com frequência.

O que eu gostaria de fazer é que se eu chamar a função sem parâmetros, ela mostrará as ramificações e me permitirá fazer o processo para a ramificação que eu inseri, e se eu chamo com um parâmetro para fazer o processo em tal ramo diretamente

function 3bra(){
  #If there's no parameter
  if ["$1" -eq ""]; then
    #show me the branches
    git branch
    #wait for input and give the parameter such entered value
    read $1
  fi

  #checkout to the parameter branch
  git checkout "$1"

  if [ $? -eq 0 ]; then
    #if there are no errors, complete the checkout process
    npm i
    npm rebuild node-sass --force
    npm run start
  fi
}

Minha pergunta é como eu posso dar $1 do valor de entrada, e também sair se nada for dado na parte de espera de entrada

    
por Nicolas M. Pardo 12.03.2018 / 18:07

2 respostas

0

#!/bin/bash
branch=""
function 3bra(){
  #If there's no paramether
  if [[ -z "$*" ]]; then
    #show me the branches
    git branch
    #wait for input and give the paramether such entered value
    echo "Which branch?"
    read -t 10 branch || exit
  else
    #Stuff to do if 3bra is called with params...
    branch="$1"
  fi
  #checkout to the paramether branch
  git checkout "$branch"
  if [[ "$?" -eq 0 ]]; then
    #if there are no errors, complete the checkout process
    npm i
    npm rebuild node-sass --force
    npm run start
  fi
}
#Call the function and pass in the parameters.
3bra "$1"

O read -t 10 especifica um tempo limite de 10 segundos. Se nenhuma entrada for fornecida, o script sai.

Supondo que há outras coisas neste script, caso contrário você não precisaria realmente da chamada de função. Salve o script e execute-o, passando em um argumento. Ele encaminhará o argumento para a função, se presente.

Além disso, eu não estou familiarizado com o git, então se algo git releated está preso no lugar errado, bem, meu mal.

    
por sunshine 12.03.2018 / 19:07
0

Veja como eu escreveria (com notas de rodapé):

function 3bra(){
  local branch  # (1)

  if [[ $1 ]]; then  # (2)
    branch="$1"
  else
    # Show branches.
    git branch
    # Get branch from user.
    read branch  # (3, 4)
  fi

  # Checkout the given branch.
  if git checkout "$branch"; then  # (5)
    # Complete the checkout process.
    npm i
    npm rebuild node-sass --force
    npm run start
  fi
}
  1. Isto declara a variável branch local para a função. Isso não é obrigatório, mas é um bom hábito.
  2. Esse teste ( [[ $1 ]] ) retornará false se $1 não estiver definido ou nulo. É uma maneira mais sucinta de fazer o que você estava fazendo.
    • O seu também teve um erro de sintaxe aqui - falta de espaços em branco. Deve ser [ "$1" -eq "" ]
  3. Quando read ing uma variável, você usa o nome da variável ( branch ), não seu conteúdo ( $branch ).
  4. É melhor usar uma variável nomeada do que um parâmetro numerado.
    • Embora, se você precisar atribuir à matriz de argumentos, você pode usar set -- arg1 arg2
  5. Isso testa o valor de retorno diretamente.

Além disso, se você quiser ser realmente completo, envie um erro se muitos argumentos forem fornecidos:

if [[ $# -gt 1 ]]; then
  echo "${FUNCNAME[0]}: Too many arguments" >&2
  return 1
fi

if [[ $1 ]]; then
...
    
por wjandrea 13.03.2018 / 21:11