Другие ответы хорошо объясняют, почему вы наблюдаете такое поведение. Но если я могу предложить, как на самом деле решить эту проблему:
Не используйте псевдонимы для чего-либо даже отдаленно сложного.
Конечно, вы можете запутать свой мозг, пытаясь выяснить, как вложить N слоев кавычек, но это редко стоит того для псевдонима. Когда псевдоним настолько сложен, что его цитирование становится нетривиальным, просто переключитесь на функцию оболочки:
shopt(){
echo "You're looking for setopt. This is Z shell, man, not Bash."
}
Это удаляет целый слой кавычек, позволяет позже добавить больше кода в функцию оболочки и, как правило, намного легче читать. Это также позволяет гораздо более точно контролировать, как и где вставляются аргументы, вместо подхода с псевдонимами «просто замените начало строки и оставьте оставшиеся слова там, где они могут». Например, с вашим (исправленным псевдонимом ), если вы наберете это:
shopt -s some_opt
...тогда вы получите этот вывод:
You're looking for setopt. This is Z shell, man, not Bash. -s some_opt
Вероятно, вы хотели не этого. Функция оболочки будет потреблять любые аргументы, которые вы ей передаете, и молча отбрасывать их.
Если я правильно прочитал сообщение об ошибке, в каком-то дереве (, т. е. в каталоге в какой-то момент в прошлом )один и тот же файл (содержимое )упоминается дважды. Само по себе это не фатально, но это, вероятно, означает, что что-то не так в вашей прошлой истории.
Что бы я сделал :Клонировать репозиторий в новую копию (локально; это должно распутать всякую ерунду в новом экземпляре; чек об оплате! ), сделайте резервную копию , прежде чем возиться! В подозрительном репозитории используйте низкоуровневые -инструменты git, такие как git show
, чтобы осмотреться и посмотреть, сможете ли вы выяснить, что не так (и, возможно, исправить ). Проверьте опции git fsck
.