Я только что обновил свой Ubuntu 16.04 до 17.04 и обнаружил небольшую проблему с cd
командой.
Допустим, у меня есть две папки: album-01
&album-02
В Ubuntu 16.04, если я cd album*
это сделаю, я пойду в первую найденную папкуalbum-01
Но в новой Ubuntu 17.04, если я это сделаю, cd album*
приведи меня
-bash: cd: too many arguments
Как сделать cd
в Ubuntu 17.04 как cd
в Ubuntu 16.04?
command-line
bash
cd-command
Hidayats
источник
источник
cd
два местоположения и каким-то образом ожидаете, что оно определит, какое вы хотите.Ответы:
Я не мог проверить это на реальной системе 17.04 (только проверил, что она работает на 16.04), но вы должны иметь возможность переопределить
cd
встроенную команду Bash своей собственной пользовательской функцией, которая отбрасывает любые дополнительные аргументы, кроме первого :Обновление: Как предлагается в комментарии @ muru , эта версия ниже может работать лучше и поддерживать вызов
cd
без аргументов:После того, как вы ввели эту строку выше в своем терминале, пожалуйста, проверьте,
cd
ведет ли себя теперь так, как вы хотите. Если это так, вы можете сделать это определение функции постоянным, добавив эту строку в конец вашего~/.bashrc
файла. В противном случае он исчезнет, как только вы закончите текущий сеанс оболочки.Обратите внимание, что если по какой-либо причине вам временно понадобится использовать настоящую
cd
встроенную команду Bash вместо этой пользовательской функции, вы можете просто вызвать ееcommand cd
вместо обычногоcd
.источник
.sh
файл, а затем создал псевдоним:mcd="source /home/user/bin/cd.sh"
cd () { builtin cd "${@:1:1}"; }
вместо этого.Краткий ответ / Обходной путь
Чтобы ответить на ваш вопрос в этом конкретном случае, это работает
Но это, вероятно, не та функциональность, которую вы действительно хотите.
Что изменилось?
Похоже, что
config-top.h
в Bash-4.4 было обновлено добавить следующую опциюИ
builtins/cd.def
относится к вашей ошибке здесь:Что я могу сделать в долгосрочной перспективе?
Вы можете скомпилировать свой собственный
bash
без нового CD_COMPLAINS , но это будет утомительно. Вы можете переопределитьcd
функциональность, как предложено здесь, или вы можете использовать псевдоним функции, какДоказать это
Bash 4.4 Beta, где он все еще работает
Bash 4.4 Stable Release там, где он не работает
источник
cd alb*1
, чтобы соответствовать литералу1
в конце, даже без скобок. Сначала я перепутал вашу идею с чем-то другим.Я никогда не сталкивался с этой проблемой, так как я всегда использую Tab Completion.
Таким образом, в вашем случае, вместо того, чтобы иметь неточное предположение о том, какой каталог я хочу, я бы напечатал,
cd al
Tabкоторый, если есть только одно совпадение, завершает его, и если есть 2 или более завершений, до того места, где заканчивается сопоставление, и TabTabперечисляет варианты.Вот пример из моей системы:
cd Un
Tabпосле чего TabTabпроизводит
источник
Это похоже на ошибку в Bash: согласно
man builtins
старому поведению правильное.Вы можете сообщить об ошибке в
bug-bash
списке рассылки; подробнее здесь .Собственно, об ошибке сообщалось (давно). Если вам нужен исправленный Bash сейчас, сейчас, сейчас , вот как это сделать правильно (протестировано 17.10, должно работать и на других).
Сначала создайте каталог для работы, например:
Получите исходный пакет и зависимости сборки:
Изменить,
config-top.h
чтобы изменить это (должно быть строка 32)к этому
Отредактируйте
debian/changelog
и добавьте такую запись вверху (вы также можете использовать командуdch -i
):Наиболее важными моментами являются добавление
+foo
к текущему номеру версии (этоfoo
может быть любая строка строчных букв; будьте осторожны, если вы используетеdch -i
, она увеличит последний номер, поэтому вам нужно вернуть его к текущему) и использовать правильное название релиза (artful
здесь). Наконец, бегиdpkg-source --commit
.Затем вы можете запустить
debuild
команду, и, если все пойдет хорошо (ошибки об этомdebsign
могут быть проигнорированы), вы должны иметь некоторые.deb
s в родительском каталоге, которые вы можете установить как обычно (нет необходимости устанавливать все из них, только те, которые вы теперь, используйте,dpkg -l | grep bash
чтобы узнать).Обратите внимание, что номер версии нового пакета установлен так, что вы будете автоматически получать любые последующие обновления
bash
; Если обновление не устраняет проблему, вам необходимо повторить описанный выше процесс.(Этот ответ был впервые опубликован на этот дубликат вопроса .)
источник