назначать и проверять метаданные bash-функций

Я НЕ связан с компанией, я очень довольный клиент. Попробуйте эту программу терминала: http://www.emtec.com/zoc/index.html . Также доступна версия для Mac.

Если я нарушу этим ответом какое-либо правило SE, сообщите мне, и я удалю ответ.

Изменить:

Когда я правильно понял другие ответы, эта проблема может быть вызвана терминальной программой. Терминальная программа ZOC - это профессиональное программное обеспечение, которое идеально подходит для работы. Он вставляет выделенный текст без дополнительных символов. Вы можете записывать свои сеансы в отдельный текстовый файл. И многое другое

Обновление:

В терминальной программе есть опция Вставить без заключительного символа новой строки . Может быть, это поможет.

10
09.12.2016, 13:31
4 ответа
function func_name()
{
  : '
  Invocation:   func_name $1 $2 ... $n
  Function:     Display the values of the supplied arguments, in double quotes.
  Exit status:  func_name always returns with exit status 0.
  ' :
  local i
  echo "func_name: $# arguments"
  for ((i = 1; i <= $#; ++i)); do
    echo "func_name [$i] \"$1\""
    shift
  done
  return 0
}
13
27.01.2020, 19:59

Вы можете это сделать.

$ f() { This function does nothing. 2> /dev/null; }
$ f
$ type f
f is a function
f () 
{ 
    This function does nothing. 2> /dev/null
}
3
27.01.2020, 19:59

Да, type, похоже, выводит только те части функции, которые будут выполняться. Мне это кажется разумным, поскольку обычно это все, что вас интересует при запросе type.

В качестве обходного пути, вместо использования комментариев, добавьте свои метаданные следующим образом:

func1() {
    meta="This function was generated for project: PROJECT1"
    echo "do my automation"
}

Нет необходимости когда-либо использовать эту переменную, но она появится при запросе функции с type:

$ type func1
func1 is a function
func1 () 
{ 
    meta="This function was generated for project: PROJECT1";
    echo "do my automation"
}
7
27.01.2020, 19:59

Вы можете использовать nop встроенный :. Кроме того, вам не нужно хранить его как переменную:

function f() {
  : your metadata here
  : "or here"
  # do yours
}

EDIT: Остерегайтесь специальных символов в метаданных. Для чистого текста вы можете использовать:

: <<EOT
Your metadata text here.
EOT

EDIT: Вместо этого можно использовать глобальный ассоциативный массив для хранения всех метаданных функции:

declare -A METADATA=()
METADATA[fun1]='foo bar'
function fun1() {
  echo I have some metadata: "${METADATA[$FUNCNAME]}"
}
METADATA[fun2]='baz you'
function fun2() {
  echo I have some other metadata: "${METADATA[$FUNCNAME]}"
}

Таким образом, вам не нужно разбирать вывод declare или type, а только запрашивать ключ массива.

6
27.01.2020, 19:59

Теги

Похожие вопросы