bash: передача аргументов скрипта - PullRequest
6 голосов
/ 28 июня 2011

У меня есть ряд команд, которые я запускаю перед фиксацией проекта git, поэтому я поместил его в скрипт bash.В конце у меня есть блок, который выполняет фиксацию:

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

с ожиданием того, что сообщение передается в скрипт

$ ./dostuff_then_commit "my message"

Когда я это делаю, я получаю это

fatal: Paths with -a does not make sense.

потому что $1 был определен, но сообщение не было передано правильно?Кто-нибудь может увидеть проблему и / или предложить решение?Спасибо ТАК.

Ответы [ 4 ]

6 голосов
/ 28 июня 2011

Если сообщение содержит пробелы, оно расширится до нескольких параметров до git commit. (Обратите внимание на цитирование в другом случае.) Цитируйте это:

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

Пара дополнений:

  • Я также процитировал тот, что в [], по несколько иной причине: если бы сообщение о фиксации было пустым, вы получили бы диагностику отсутствующего параметра из [. Опять же, цитирование этого избегает этого. (Вместо этого вы можете захотеть поймать это и заставить пользователя ввести реальное сообщение о коммите, хотя, если бы это было необходимо, вы, вероятно, получили бы кучу asdfzxcv сообщений о коммите ....)

  • Сообщение об ошибке вы получаете именно потому, что первое слово сообщения о фиксации принимается как сообщение о фиксации, а остальные передаются как конкретные имена файлов для фиксации; это, как говорится в сообщении об ошибке, не имеет смысла сообщать git о совершении всего (-a).

2 голосов
/ 28 июня 2011

Я просто хотел бы добавить, что вы можете комбинировать опции так:

git commit -am "some message"
2 голосов
/ 28 июня 2011

Попробуйте окружить $1 кавычками - иначе git думает, что my - это сообщение, а message - что-то еще.

if [ -z $1 ]; then git commit -a -m "no message"; else; git commit -a -m "$1"; fi
1 голос
/ 28 июня 2011

Вы должны использовать "$1" вместо $1 as $ 1` может содержать пробелы.

с $1 как my message с заменой на:

git commit -a -m $1

дает:

git commit -a -m my message

в то время как:

git commit -a -m "$1"

дает:

git commit -a -m "my message"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...