Command cd behavior [duplicate]

На этот вопрос уже есть ответ здесь:

Поскольку ubuntu 17.10, мои сценарии работают не так, как раньше:

cd a*

изменит каталог на первый каталог, начинающийся с a . Теперь я получаю эту ошибку:

bash: cd: too many arguments

​​Я думаю, теперь он обнаруживает несколько аргументов из-за нескольких каталогов, начинающихся с a , и выдает ошибку. Как я могу изменить поведение cd на старое способ?

8
задан 4 January 2018 в 22:33

2 ответа

Я нашел тот же вопрос: 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
4
ответ дан 4 January 2018 в 22:33

Это похоже на ошибку в 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 может быть проигнорирован), у Вас должны быть некоторые .debs в родительском каталоге, который можно установить, как обычно (нет никакой потребности установить всех их, просто те Вы имеете теперь; использовать dpkg -l | grep bash узнать).

Обратите внимание, что номер версии нового пакета установлен так, чтобы Вы автоматически получили любое будущее обновление bash; если обновление не решает проблему, необходимо повторить вышеупомянутый процесс.

8
ответ дан 4 January 2018 в 22:33
  • 1
    Вы уверены? Следите за Вами, 11.04 и предшествующий работавший превосходный на этой видеокарте. – Core Xii 1 June 2012 в 15:37
  • 2
    Вы уверены? Следите за Вами, 11.04 и предшествующий работавший превосходный на этой видеокарте. – Core Xii 1 June 2012 в 15:37
  • 3
    Вы уверены? Следите за Вами, 11.04 и предшествующий работавший превосходный на этой видеокарте. – Core Xii 1 June 2012 в 15:37
  • 4
    Вы уверены? Следите за Вами, 11.04 и предшествующий работавший превосходный на этой видеокарте. – Core Xii 1 June 2012 в 15:37
  • 5
    Вы уверены? Следите за Вами, 11.04 и предшествующий работавший превосходный на этой видеокарте. – Core Xii 1 June 2012 в 15:37
  • 6
    Вы уверены? Следите за Вами, 11.04 и предшествующий работавший превосходный на этой видеокарте. – Core Xii 1 June 2012 в 15:37

Другие вопросы по тегам:

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