2011-06-28 18 views
6

Tengo una serie de comandos que corro antes de comprometer un proyecto git, así que lo puse en un script bash. Al final tengo un bloque que hace la confirmación:bash: pasando los argumentos del script

if [ -z $1 ]; then git commit -a -m "no message"; else; git commit -a -m $1; fi 

con la expectativa de que el mensaje se pasa al script

$ ./dostuff_then_commit "my message" 

Cuando hago esto, entiendo que

fatal: Paths with -a does not make sense. 

porque se ha definido $1 pero el mensaje no se pasa correctamente? ¿Alguien puede ver el problema y/o sugerir una solución? Gracias.

Respuesta

6

Si el mensaje contiene espacios, se expandirá a múltiples parámetros a git commit. (Nótese la cita en el otro caso.) Cita que:

if [ -z "$1" ]; then 
    git commit -a -m "no message" 
else 
    git commit -a -m "$1" 
fi 

Un par de adiciones:

  • También he citado el de la [], por una razón ligeramente diferente: si el commit el mensaje estaba vacío, se obtendría un diagnóstico de parámetro faltante del [. De nuevo, citarlo evita esto. (En su lugar, puede querer captar eso y hacer que el usuario ingrese un mensaje de confirmación real, aunque si fuera necesario probablemente obtenga un montón de mensajes de confirmación asdfzxcv ...)

  • El mensaje de error es ' Re Get es específicamente porque la primera palabra del mensaje de confirmación se toma como el mensaje de confirmación y el resto se pasa como nombres de archivo específicos para confirmar; esto, como dice el mensaje de error, no tiene sentido cuando se dice git para confirmar todo (-a).

+0

Gracias por el poco extra allí. – hatmatrix

2

Trate de rodear $1 con citas - de lo contrario git piensa my es el mensaje y message es otra cosa.

if [ -z $1 ]; then git commit -a -m "no message"; else; git commit -a -m "$1"; fi 
1

se debe utilizar en lugar de "$1"$1 as $ 1` puede tener espacios en ella.

con $1 como my message sustituyendo en:

git commit -a -m $1 

da:

git commit -a -m my message 

mientras:

git commit -a -m "$1" 

da:

git commit -a -m "my message" 
2

me gustaría añadir que se puede combinar opciones, así:

git commit -am "some message" 
+0

ah, gracias ..... – hatmatrix

Cuestiones relacionadas