2

Я видел следующий ярлык для "git commit", предложенный где-то:

function gc {
  git commit -m "$*"
}

Предполагается, что это позволит вам написать встроенное сообщение в оболочке без кавычек или чего-либо еще. Подобно:

gc This is a commit message

Проблема в том, что это не работает, если само сообщение фиксации содержит скобки или кавычки. (И я использую много скобок / кавычек в моих сообщениях коммита.) Может кто-нибудь, хорошо разбирающийся в искусстве написания сценариев bash, предложить лучший способ?

1 ответ1

3

Я не думаю, что это проблема с вашей функцией (или, точнее, я не думаю, что это проблема, которую вы можете решить с помощью своей функции). bash анализирует командную строку (включая интерпретацию строк в кавычках, различные выражения в скобках и т. д.) перед вызовом вашей функции, прежде чем он даже решит вызвать вашу функцию. Поэтому, когда вы набираете что-то вроде gc fixed Greg's bug , bash потребует, чтобы вы закрыли строку в кавычках, прежде чем она выполнит функцию; когда вы gc printf("%s", integervar) not a good idea , bash будет жаловаться на круглые скобки и никогда даже не решит, какая команда / функция / что бы ни запрашивалась.

Я предполагаю, что смысл использования $* состоял в том, чтобы не заключать в кавычки памятку в командной строке, но это исключает необходимость заключать в сообщение пробелы. Если сообщение содержит другие метасимволы оболочки, вы должны заключить их в кавычки или экранировать их соответствующим образом:

gc "fixed Greg's bug"
gc 'printf("%s", integervar) not a good idea'
gc 'fixed this & deferred that'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .