Управление состоянием от функции раковины рыбы

Я пытаюсь написать функцию 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"

Но обратите внимание, что каждая новая строка будет заменена пробелом.

Другие вопросы по тегам