Как лучше всего хранить и версионировать его псевдонимы/функции/симлинки?

Переносимое решение с использованием awk :

awk -v find=abcdef -v rep=pqrstu '{
  lwr=tolower($0)
  offset=index(lwr, tolower(find))

  if( offset > 0 ) {
    printf "%s", substr($0, 0, offset)
    len=length(find)

    for( i=0; i<len; i++ ) {
      out=substr(rep, i+1, 1)

      if( substr($0, offset+i, 1) == substr(lwr, offset+i, 1) )
        printf "%s", tolower(out)
      else
        printf "%s", toupper(out)
    }

    printf "%s\n", substr($0, offset+len)
  }
}'

Пример ввода:

other abcdef other
other Abcdef other
other AbCdEf other

Пример вывода:

other pqrstu other
other Pqrstu other
other PqRsTu other

Обновление

Как указано в комментариях, приведенное выше заменит только первый экземпляр find в каждой строке. Чтобы заменить все экземпляры:

awk -v find=abcdef -v rep=pqrstu '{
  input=$0
  lwr=tolower(input)
  offset=index(lwr, tolower(find))

  if( offset > 0 ) {
    while( offset > 0 ) {

      printf "%s", substr(input, 0, offset)
      len=length(find)

      for( i=0; i<len; i++ ) {
        out=substr(rep, i+1, 1)

        if( substr(input, offset+i, 1) == substr(lwr, offset+i, 1) )
          printf "%s", tolower(out)
        else
          printf "%s", toupper(out)
      }

      input=substr(input, offset+len)
      lwr=substr(lwr, offset+len)
      offset=index(lwr, tolower(find))
    }

    print input
  }
}'

Пример ввода:

other abcdef other ABCdef other
other Abcdef other abcDEF
other AbCdEf other aBCdEf other

Пример вывода:

other pqrstu other PQRstu other
other Pqrstu other pqrSTU
other PqRsTu other pQRsTu other
0
18.12.2018, 11:57
1 ответ

Я подозреваю, что проблема совершенно не связана с именами файлов и также может возникнуть, если вы загружаете .zshrcв исходном состоянии.

Причина ошибки

Эта ошибка обычно возникает, когда вы вызываете функцию из самой себя, что приводит к рекурсии. Это может произойти непреднамеренно, когда вы даете функциям то же имя, что и внешняя команда или встроенная функция, используемая внутри этой функции. Например:

echo () {
    echo "Out: " $@
}

Команда echoбудет работать нормально до того, как вы определите эту функцию, но после определения произойдет сбой с этой ошибкой:

% echo foobar
echo:1: maximum nested function level reached; increase FUNCNEST?

(Разница в тексте сообщения, вероятно, связана с используемыми версиями zsh, в моем случае это 5.6.2)

Это также может произойти из-за того, что несколько функций вызывают друг друга:

foo () {
    echo $@
}

echo () {
    something_else
    foo $@
} 

В сообщении об ошибке будет показано имя функции, которую больше нельзя вызывать из-за достижения предела вложенности, и строка функции, в которой происходит этот вызов. Таким образом, в приведенном выше случае либо:

% echo foobar
echo:1: maximum nested function level reached; increase FUNCNEST?

или

% echo foobar
foo:2: maximum nested function level reached; increase FUNCNEST?

В случае вопроса кажется, что функция с именем bashвызывается в строке 30 какой-то функции.

Исправление

Если рекурсия не является преднамеренной,этого можно избежать, указав zsh, какую функциональную команду, отличную от -, вы хотите использовать.

  • Если вам нужна встроенная команда -, просто добавьте перед нейbuiltin:

    echo ()
    {
        builtin echo "Out: " $@
    }
    
  • Если вам нужна внешняя команда, добавьте перед нейcommand:

    echo ()
    {
        command echo "Out: " $@
    }
    

    или используйте полный путь

    echo ()
    {
        /bin/echo "Out: " $@
    }
    

Если вы не уверены, где вы используете bashв конфигурации zsh, вы можете использовать grepдля рекурсивного поиска ${TOOLS_HOME}/cli/:

grep -r bash ${TOOLS_HOME}/cli/
1
28.01.2020, 02:41

Теги

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