Рейтинг:0

Конфликт функции Bash/псевдонима вызывает ошибку seg

флаг me

Проблема в этом посте также произошла со мной. mkdir вылетает из bash

Я не мог комментировать там, потому что нет репутации. Кто-нибудь может объяснить, почему это происходит? Это происходит во время выполнения, а не при загрузке функции. Вот паста того же выпуска.

мд() 
{  
    [ $# -eq 0 ] && { echo "$0 имя_каталога [разрешения]"; возвращаться; }
    [ -d "$1" ] && { echo "%1 уже существует!"; возвращаться; }
    mkdir -m ${2:-0755} -p "$1"
}

«Проблема заключалась в том, что ранее у меня был псевдоним, такой как alias md="mkdir", поэтому, когда bash проанализировал новую функцию bash, он расширил md() до mkdir(), и функция стала бесконечно рекурсивной и привела к сбою оболочки».

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

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

флаг hr
Псевдонимы на самом деле являются просто макросами замены текста, поэтому, когда вы пытаетесь *define* `md() { ... }` после определения `md=mkdir`, вы на самом деле получаете `mkdir() { ... }`. Попробуйте распечатать определение функции с помощью `declare -p -f md` и `declare -p -f mkdir`, чтобы понять, что я имею в виду.
Рейтинг:0
флаг me

"Псевдонимы на самом деле просто макросы замены текста, поэтому, когда вы пытаетесь определить мд() { ... } после определения md=mkdir вы на самом деле в конечном итоге с мкдир() { ... }. Попробуйте распечатать определение функции с помощью объявить -p -f мд и объявить -p -f mkdir чтобы увидеть, что я имею в виду."

zi@zi-top:~$ объявлять -p -f nd
bash: объявить: nd: не найдено
zi@zi-top:~$ объявлять -p -f mkdir
мкдир () 
{ 
    mkdir -p "$@"
}
zi@zi-top:~$ nd () {
        mkdir -p "$@"
}
zi@zi-top:~$ объявлять -p -f nd
bash: объявить: nd: не найдено

Я вижу, что то, что сказал steeldriver, правда, я думаю, что это странное архитектурное решение, возможно, какие-то рассуждения в коде - это текстовый башизм. Спасибо!

Ответить или комментировать

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