На этот вопрос уже есть ответ здесь:
Поскольку ubuntu 17.10, мои сценарии работают не так, как раньше:
cd a*
изменит каталог на первый каталог, начинающийся с a
.
Теперь я получаю эту ошибку:
bash: cd: too many arguments
Я думаю, теперь он обнаруживает несколько аргументов из-за нескольких каталогов, начинающихся с a
, и выдает ошибку.
Как я могу изменить поведение cd
на старое способ?
Я нашел тот же вопрос: Ubuntu 17.04 - bash: cd: слишком много аргументов . Видимо это ошибка.
Предложенный обходной путь заключается в создании функции, основанной на встроенной команде cd
, которая переопределяет ее поведение:
cd(){ builtin cd "${@:1:1}"; }
Поместите указанную выше строку в начало вашего сценария, а затем используйте cd a*
как в Ubuntu 16.04. Используйте export -f cd
, если хотите использовать его в субоболочке.
Вы можете определить и экспортировать функцию также в вашем файле ~/.bashrc
:
cd(){ builtin cd "${@:1:1}"; }
export -f cd
Это похоже на ошибку в Bash: на man builtins
старое поведение является корректным.
cd [-L|[-P [-e]] [-@]] [dir]
Change the current directory to dir. if dir is not supplied,
the value of the HOME shell variable is the default. Any
additional arguments following dir are ignored.
Можно сообщить об ошибке на bug-bash
список рассылки; больше деталей здесь.
На самом деле об ошибке сообщили (давно). Если Вы хотите фиксированный Bash теперь, теперь, теперь, вот то, как сделать это правильно (протестированный на 17,10, должен работать над другими также).
Сначала создайте каталог для работы в, например:
mkdir ~/bash
cd ~/bash
Получите исходный пакет и зависимости от сборки:
apt-get source bash
sudo apt-get build-dep bash
cd bash-4.4
Править config-top.h
изменить это (должна быть строка 32),
#define CD_COMPLAINS
к этому
/* #define CD_COMPLAINS */
Править debian/changelog
и добавьте запись как это наверху (можно также использовать команду dch -i
):
bash (4.4-5ubuntu1+cd) artful; urgency=medium
* Fix cd.
-- Firas Kraiem <firas@fkraiem.org> Thu, 04 Jan 2018 21:11:22 +0900
Наиболее важные моменты должны добавить +foo
к числу текущей версии (foo
может быть любая строка строчных букв; и будьте осторожны, если Вы используете dch -i
, это увеличит последнее число, таким образом, необходимо будет вернуться он к текущему) и использовать корректное имя выпуска (artful
здесь). Наконец, выполненный dpkg-source --commit
.
Можно затем работать debuild
команда, и если все подходит (ошибки о debsign
может быть проигнорирован), у Вас должны быть некоторые .deb
s в родительском каталоге, который можно установить, как обычно (нет никакой потребности установить всех их, просто те Вы имеете теперь; использовать dpkg -l | grep bash
узнать).
Обратите внимание, что номер версии нового пакета установлен так, чтобы Вы автоматически получили любое будущее обновление bash
; если обновление не решает проблему, необходимо повторить вышеупомянутый процесс.