Script bash leu uma string com espaço em branco [duplicado]

1

Estou tentando escrever um script rápido para automaticamente enviar várias ramificações de uma só vez. Meu problema é, quando eu entro na minha mensagem de commit como uma variável de leitura, o bash e o git surtam quando usam o espaço em branco.

Aqui está meu script atual:

    #!/bin/bash
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
echo "Pushing To all branches"
echo "What is your Commit Message?"
read message

git add *
git commit -m \"$message\"
git push origin
.... (push to other branches) ...

echo "Done!"
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"

E isso funciona perfeitamente se a minha mensagem de commit é apenas uma palavra. No entanto, este não é frequentemente o caso. Por exemplo, se eu inserir:

Testing test case

como minha mensagem de commit, eu recebo os seguintes erros:

error: pathspec 'test"' did not match any file(s) known to git.
error: pathspec 'case"' did not match any file(s) known to git.

Alguém tem alguma idéia sobre como corrigir isso para que meu script bash possa lidar com espaços em branco?

Muito obrigado!

    
por Zack 07.05.2018 / 04:31

1 resposta

2

Seu problema principal é chamar git commit -m com aspas duplas literais como parte da mensagem.

A linha de comando dada a git será, se $message for a string some message here ,

git commit -m '"some' 'message' 'here"'

Isso se deve à citação das aspas duplas.

Em vez disso, isso funcionaria:

git commit -m "$message"

Use um modelo de mensagem de confirmação.

Supondo que o modelo esteja no arquivo template.txt da seguinte forma:

# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Pushing To all branches
# What is your Commit Message?

... então isso seria inserido no topo da mensagem de commit em um editor quando você faz

git commit -t template.txt

Fornecer um editor para editar a mensagem de confirmação tornaria muito mais fácil para o usuário formatar corretamente uma mensagem de confirmação correta.

Você também pode definir o commit.template no arquivo .git/config do repositório para o nome do caminho de um arquivo de modelo a ser usado ( -t não é necessário).

Qualquer linha que comece com # no modelo não será confirmada.

Veja também:

por 07.05.2018 / 09:02