Я часто генерирую и регистрирую множество функций bash, которые автоматизируют многие задачи, которые я обычно выполняю в своих проектах разработки. Это поколение зависит от метаданных проекта, над которым я работаю.
Я хочу аннотировать функции информацией о проекте, который они сгенерировали, следующим образом:
func1() {
# This function was generated for project: PROJECT1
echo "do my automation"
}
В идеале я бы мог видеть комментарий, когда я проверю определение:
$ type func1
func1 is a function
func1 ()
{
# This function was generated for project: PROJECT1
echo "do my automation"
}
Но почему-то bash игнорирует комментарии в момент загрузки функции, а не при ее выполнении. Таким образом, комментарии потеряны, и я получаю этот результат:
func1 is a function
func1 ()
{
echo "do my automation"
}
Есть ли способ назначить метаданные для функций, а затем проверить их? Это можно получить при проверке определения с типом?
$1
есть-h
, а затемprintf
/echo
помощь в одну строку / использование / что угодно.Ответы:
источник
Да,
type
кажется, распечатывает только те части функции, которые будут запущены. На самом деле это кажется разумным, поскольку обычно это все, что вас интересует при запросахtype
.В качестве обходного пути, вместо использования комментариев, добавьте ваши метаданные следующим образом:
Нет необходимости использовать эту переменную, но она появится при запросе функции с помощью
type
:источник
Вы можете использовать встроенный NOP
:
. Кроме того, вам не нужно хранить его как переменную:РЕДАКТИРОВАТЬ : Остерегайтесь специальных символов в ваших метаданных. Для чистого текста вы можете использовать:
РЕДАКТИРОВАТЬ : вместо этого вы можете использовать глобальный ассоциативный массив для хранения метаданных всех функций:
Таким образом, вам не нужно анализировать
declare
илиtype
выводить данные, а только запрашивать ключ массива.источник
your metadata here
могут содержать расширения, которые имеют побочные эффекты. Лучше использовать одинарные кавычки, такие как ответ @ AlexP.Ты можешь это сделать.
источник
(
могут быть использованы, и первое слово не должно быть допустимой командой.