Управление состоянием от функции раковины рыбы
Я пытаюсь написать функцию quickgit
который автоматически добавляет, фиксирует и передает с дополнительным преимуществом сообщения о фиксации, поступающего от fortune
, У меня есть следующий скрипт:
function quickgit
git add --all
git commit -m (fortune)
git push
end
Который работает, кроме сообщения о коммите "(fortune)"
вместо того, чтобы быть сообщением от удачи. Как мне убедиться, что fortune
работает и расширяется в моей функции рыбы?
2 ответа
fish
У меня достаточно проблем с тонкостями правильного цитирования, чтобы я не использовал его в сценариях полностью. (См. https://github.com/fish-shell/fish-shell/issues/159)
Я не смог воспроизвести вашу точную проблему, но столкнулся со своими собственными вокруг многолинейных состояний. (см. указанную ошибку)
Тем не менее, для вашего случая использования вы можете полностью избежать этого с помощью:
function quickgit
git add --all
fortune | git commit -F -
git push
end
Подстановка команд по умолчанию разделяет вывод команды на границы новой строки. Таким образом, многострочное состояние будет передавать несколько аргументов git commit -m
, Это означает, что опция -m будет обрабатывать только первую строку, а вторая-третья строки будут обрабатываться как имена файлов. Попробуйте добавить set -l IFS
к вашей функции, чтобы предотвратить это расщепление. Другой подход - записать выходные данные в var, а затем интерполировать var:
set -l fortune (/usr/games/fortune)
git commit -m "$fortune"
Но обратите внимание, что каждая новая строка будет заменена пробелом.