Estou criando uma pequena função para um processo que tenho que repetir com frequência.
O que eu gostaria de fazer é que se eu chamar a função sem parâmetros, ela me mostre as ramificações e me permita fazer o processo para a ramificação que entrei, e se eu chamar com um parâmetro para fazer o processo nessa ramificação 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 dúvida é como posso fornecer $1
o valor de entrada e também sair se nada for fornecido na parte de espera de entrada
Responder1
#!/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 será encerrado.
Supondo que haja outras coisas neste script, caso contrário você realmente não precisaria da chamada de função. Salve o script e execute-o, passando um argumento. Ele encaminhará o argumento para a função, se presente.
Além disso, não estou familiarizado com o git, então se algo que o git releated estiver preso no lugar errado, bem, que pena.
Responder2
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
}
- Isso declara a variável
branch
local para a função. Isso não é obrigatório, mas é um bom hábito. - Este teste (
[[ $1 ]]
) retornará falso se$1
não estiver definido ou for nulo. É uma maneira mais sucinta de fazer o que você estava fazendo.- O seu também teve um erro de sintaxe aqui - faltando espaços em branco. Deveria estar
[ "$1" -eq "" ]
- O seu também teve um erro de sintaxe aqui - faltando espaços em branco. Deveria estar
- Ao
read
inserir uma variável, você usa o nome da variável (branch
), não seu conteúdo ($branch
). - É 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
- Embora se você precisar atribuir à matriz de argumentos, você pode usar
- Isso testa o valor de retorno diretamente.
Além disso, se você quiser ser realmente completo, gere um erro se muitos argumentos forem fornecidos:
if [[ $# -gt 1 ]]; then
echo "${FUNCNAME[0]}: Too many arguments" >&2
return 1
fi
if [[ $1 ]]; then
...