Командное поведение cd [duplicate]

В дополнение к существующим ответам, у вас могут быть нестандартные / общие совместимости и варианты использования производительности, которые извлекают выгоду из разных разделов.

Возможно, вам захочется поделиться данными с другой операционной системой, такой как Windows и необходимо использовать файловую систему, поддерживаемую как Linux, так и поддерживающую.

У вас могут быть специальные прецеденты, которые позволяют вам иметь разные настройки (одного и того же типа файловой системы, например, раздела EXT4 для большого количества небольших файлов и раздел EXT4 для небольшого большого файла (например, виртуальных машин), его можно оптимизировать для хранения и производительности для обоих вариантов использования.

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

6 ответов

Я нашел тот же вопрос: 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
ответ дан 22 May 2018 в 15:46
  • 1
    Поскольку вы уже отметили Q как дубликат, зачем пытаться дублировать принятый ответ из дубликата Q? – Xen2050 4 January 2018 в 16:50
  • 2
    @ Xen2050, это было трудное решение :), потому что иногда легко найти основную часть ответа по вопросу, отмеченному как дублирование. Кроме того, эти export вещи не уточняются под первоначальным ответом. – pa4080 4 January 2018 в 16:56
  • 3
    Я не заметил экспорт, но это помогает. Я бы подумал «для репутации», но в любом случае здесь +10 – Xen2050 4 January 2018 в 17:51

Я нашел тот же вопрос: 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
ответ дан 17 July 2018 в 23:53

Я нашел тот же вопрос: 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
ответ дан 24 July 2018 в 17:07

Это выглядит как ошибка в 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, также должно работать и на других).

Сначала создайте каталог для работы, например: [ ! d6]

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
[d9 ] к этому

/* #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; если обновление не устраняет проблему, вам необходимо повторить описанный выше процесс.

8
ответ дан 22 May 2018 в 15:46
  • 1
    Этот вопрос был закрыт как дубликат. Этот ответ полезен и не появляется по дублированному вопросу. Возможно, стоит добавить этот ответ на этот вопрос, askubuntu.com/questions/905832/… – Arronical 4 January 2018 в 16:48
  • 2
    @ Arronical Will do; он был закрыт, когда я писал. – fkraiem 4 January 2018 в 16:50

Это выглядит как ошибка в 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, также должно работать и на других).

Сначала создайте каталог для работы, например: [ ! d6] 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; если обновление не устраняет проблему, вам необходимо повторить описанный выше процесс.

8
ответ дан 17 July 2018 в 23:53

Это выглядит как ошибка в 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, также должно работать и на других).

Сначала создайте каталог для работы, например: [ ! d6] 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; если обновление не устраняет проблему, вам необходимо повторить описанный выше процесс.

8
ответ дан 24 July 2018 в 17:07
  • 1
    Этот вопрос был закрыт как дубликат. Этот ответ полезен и не появляется по дублированному вопросу. Возможно, стоит добавить этот ответ на этот вопрос, askubuntu.com/questions/905832/… – Arronical 4 January 2018 в 16:48
  • 2
    @ Arronical Will do; он был закрыт, когда я писал. – fkraiem 4 January 2018 в 16:50

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

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