Я только что обновил Ubuntu 16.04 до 17.04 и нашел небольшую проблему с командой cd.
Предположим, что у меня есть две папки: album-01 & amp; 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?
Я не мог проверить это на реальной системе 17.04 (только проверено, что он работает с 16.04), но вы должны иметь возможность переопределить встроенную команду cd Bash с вашей собственной пользовательской функцией, которая отбрасывает любые дополнительные аргументы, кроме первого:
cd(){ command cd "$1" ; }
Обновление: как было предложено в комментарии @ muru, эта версия ниже может работать лучше и поддерживать вызов cd без аргументов:
cd(){ builtin cd "${@:1:1}"; }
После того, как вы ввели эту строку выше в своем терминале, убедитесь, что cd теперь ведет себя так, как вы хотите. Если это так, вы можете сделать это определение функции постоянным, добавив эту строку в конец вашего ~/.bashrc файла. В противном случае он исчезнет, как только вы закончите текущий сеанс оболочки.
Обратите внимание, что если по какой-либо причине вам временно понадобится использовать настоящую cd встроенную команду Bash вместо этой настраиваемой функции, вы можете просто назовите его с помощью command cd вместо обычного cd.
Я не мог проверить это на реальной системе 17.04 (только проверено, что он работает с 16.04), но вы должны иметь возможность переопределить встроенную команду cd Bash с вашей собственной пользовательской функцией, которая отбрасывает любые дополнительные аргументы, кроме первого:
cd(){ command cd "$1" ; }
Обновление: как было предложено в комментарии @ muru, эта версия ниже может работать лучше и поддерживать вызов cd без аргументов:
cd(){ builtin cd "${@:1:1}"; }
После того, как вы ввели эту строку выше в своем терминале, убедитесь, что cd теперь ведет себя так, как вы хотите. Если это так, вы можете сделать это определение функции постоянным, добавив эту строку в конец вашего ~/.bashrc файла. В противном случае он исчезнет, как только вы закончите текущий сеанс оболочки.
Обратите внимание, что если по какой-либо причине вам временно понадобится использовать настоящую cd встроенную команду Bash вместо этой настраиваемой функции, вы можете просто назовите его с помощью command cd вместо обычного cd.
Я не мог проверить это на реальной системе 17.04 (только проверено, что он работает с 16.04), но вы должны иметь возможность переопределить встроенную команду cd Bash с вашей собственной пользовательской функцией, которая отбрасывает любые дополнительные аргументы, кроме первого:
cd(){ command cd "$1" ; }
Обновление: как было предложено в комментарии @ muru, эта версия ниже может работать лучше и поддерживать вызов cd без аргументов:
cd(){ builtin cd "${@:1:1}"; }
После того, как вы ввели эту строку выше в своем терминале, убедитесь, что cd теперь ведет себя так, как вы хотите. Если это так, вы можете сделать это определение функции постоянным, добавив эту строку в конец вашего ~/.bashrc файла. В противном случае он исчезнет, как только вы закончите текущий сеанс оболочки.
Обратите внимание, что если по какой-либо причине вам временно понадобится использовать настоящую cd встроенную команду Bash вместо этой настраиваемой функции, вы можете просто назовите его с помощью command cd вместо обычного cd.
Я не мог проверить это на реальной системе 17.04 (только проверено, что он работает с 16.04), но вы должны иметь возможность переопределить встроенную команду cd Bash с вашей собственной пользовательской функцией, которая отбрасывает любые дополнительные аргументы, кроме первого:
cd(){ command cd "$1" ; }
Обновление: как было предложено в комментарии @ muru, эта версия ниже может работать лучше и поддерживать вызов cd без аргументов:
cd(){ builtin cd "${@:1:1}"; }
После того, как вы ввели эту строку выше в своем терминале, убедитесь, что cd теперь ведет себя так, как вы хотите. Если это так, вы можете сделать это определение функции постоянным, добавив эту строку в конец вашего ~/.bashrc файла. В противном случае он исчезнет, как только вы закончите текущий сеанс оболочки.
Обратите внимание, что если по какой-либо причине вам временно понадобится использовать настоящую cd встроенную команду Bash вместо этой настраиваемой функции, вы можете просто назовите его с помощью command cd вместо обычного cd.
Я не мог проверить это на реальной системе 17.04 (только проверено, что он работает с 16.04), но вы должны иметь возможность переопределить встроенную команду cd Bash с вашей собственной пользовательской функцией, которая отбрасывает любые дополнительные аргументы, кроме первого:
cd(){ command cd "$1" ; }
Обновление: как было предложено в комментарии @ muru, эта версия ниже может работать лучше и поддерживать вызов cd без аргументов:
cd(){ builtin cd "${@:1:1}"; }
После того, как вы ввели эту строку выше в своем терминале, убедитесь, что cd теперь ведет себя так, как вы хотите. Если это так, вы можете сделать это определение функции постоянным, добавив эту строку в конец вашего ~/.bashrc файла. В противном случае он исчезнет, как только вы закончите текущий сеанс оболочки.
Обратите внимание, что если по какой-либо причине вам временно понадобится использовать настоящую cd встроенную команду Bash вместо этой настраиваемой функции, вы можете просто назовите его с помощью command cd вместо обычного cd.
Чтобы ответить на ваш вопрос в этом конкретном случае, это работает
cd album*1
Но это, вероятно, не функциональность, которую вы действительно хотите.
Похоже, что config-top.h в Bash-4.4 обновлен, чтобы добавить следующий параметр
/* Define CD_COMPLAINS if you want the non-standard, but sometimes-desired
error messages about multiple directory arguments to `cd'. */
#define CD_COMPLAINS
И config-top.h ссылается на вашу ошибку здесь:
#if defined (CD_COMPLAINS)
else if (list->next)
{
builtin_error (_("too many arguments"));
return (EXECUTION_FAILURE);
}
#endif
Что я могу сделать в долгосрочной перспективе?:
Вы можете скомпилировать свой bash без нового [d9 ] Что я могу сделать в долгосрочной перспективе?: , но это будет утомительно. Вы можете переопределить функциональность cd, как предлагается здесь, или вы могли бы использовать функцию, подобную
cd "$(find $1* | head -1)"
. Докажите ее
Bash 4.4 Beta, где она все еще работает
#Pulling and unpacking source
$ wget https://ftp.gnu.org/gnu/bash/bash-4.4-beta.tar.gz
$ tar -xzvf bash-4.4-beta.tar.gz
$ cd bash-4.4-beta
#Building, go grab something to drink. It's gonna be a while.
~/bash-4.4-beta$ ./configure
~/bash-4.4-beta$ make
#Check Version
~/bash-4.4-beta$ ./bash --version
GNU bash, version 4.4.0(1)-beta (x86_64-unknown-linux-gnu)
#Enter a clean interactive prompt
~/bash-4.4-beta$ env -i PATH="$PWD:$PATH" ./bash --noprofile --norc
#Test example
bash-4.4$ mkdir album-0{1..2}
bash-4.4$ cd album* && pwd
/home/gkent/bash-4.4-beta/album0-1
Bash 4.4 Стабильный релиз, где он не работает
#Pulling and unpacking source
$ wget https://ftp.gnu.org/gnu/bash/bash-4.4.tar.gz
$ tar -zxvf bash-4.4.tar.gz
$ cd bash-4.4/
#Building, go grab something to drink. It's gonna be a while.
~/bash-4.4$ ./configure
~/bash-4.4$ make
#Check Version
~/bash-4.4$ ./bash -version
GNU bash, version 4.4.0(1)-release (x86_64-unknown-linux-gnu)
#Enter a clean interactive prompt
~/bash-4.4$ env -i PATH="$PWD:$PATH" ./bash --noprofile --norc
#Test example
bash-4.4$ mkdir album-0{1..2}
bash-4.4$ cd album*
bash: cd: too many arguments
Я никогда не сталкивался с этой проблемой, так как всегда использую вкладку «Завершение».
Итак, в вашем случае, вместо того, чтобы иметь неточное представление о том, какой каталог я хочу, я бы набрал cd al Tab, если есть только одно совпадение, завершает его, и если есть 2 или более завершений до того, где заканчивается совпадение, а TabTab перечисляет варианты.
Вот пример из моей системы:
[ f4] Tab
cd Unknown
, за которым следует Tab Вкладка производит
Unknown/ Unknown Artist - Unknown Album/
Это выглядит как ошибка в 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; если обновление не устраняет проблему, вам необходимо повторить описанный выше процесс.
now
Я никогда не сталкивался с этой проблемой, так как всегда использую вкладку «Завершение».
Итак, в вашем случае, вместо того, чтобы иметь неточное представление о том, какой каталог я хочу, я бы набрал cd al Tab, если есть только одно совпадение, завершает его, и если есть 2 или более завершений до того, где заканчивается совпадение, а TabTab перечисляет варианты.
Вот пример из моей системы:
cd Un Tab
cd Unknown
, за которым следует Tab Вкладка производит
Unknown/ Unknown Artist - Unknown Album/
Это выглядит как ошибка в 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; если обновление не устраняет проблему, вам необходимо повторить описанный выше процесс.
now
Чтобы ответить на ваш вопрос в этом конкретном случае, это работает
cd album*1
Но это, вероятно, не функциональность, которую вы действительно хотите.
Похоже, что config-top.h в Bash-4.4 обновлен, чтобы добавить следующий параметр
/* Define CD_COMPLAINS if you want the non-standard, but sometimes-desired
error messages about multiple directory arguments to `cd'. */
#define CD_COMPLAINS
И config-top.h ссылается на вашу ошибку здесь:
#if defined (CD_COMPLAINS)
else if (list->next)
{
builtin_error (_("too many arguments"));
return (EXECUTION_FAILURE);
}
#endif
Что я могу сделать в долгосрочной перспективе?:
Вы можете скомпилировать свой bash без нового Что я могу сделать в долгосрочной перспективе?: , но это будет утомительно. Вы можете переопределить функциональность cd, как предлагается здесь, или вы могли бы использовать функцию, подобную
cd "$(find $1* | head -1)"
. Докажите ее
Bash 4.4 Beta, где она все еще работает
#Pulling and unpacking source
$ wget https://ftp.gnu.org/gnu/bash/bash-4.4-beta.tar.gz
$ tar -xzvf bash-4.4-beta.tar.gz
$ cd bash-4.4-beta
#Building, go grab something to drink. It's gonna be a while.
~/bash-4.4-beta$ ./configure
~/bash-4.4-beta$ make
#Check Version
~/bash-4.4-beta$ ./bash --version
GNU bash, version 4.4.0(1)-beta (x86_64-unknown-linux-gnu)
#Enter a clean interactive prompt
~/bash-4.4-beta$ env -i PATH="$PWD:$PATH" ./bash --noprofile --norc
#Test example
bash-4.4$ mkdir album-0{1..2}
bash-4.4$ cd album* && pwd
/home/gkent/bash-4.4-beta/album0-1
Bash 4.4 Стабильный релиз, где он не работает
#Pulling and unpacking source
$ wget https://ftp.gnu.org/gnu/bash/bash-4.4.tar.gz
$ tar -zxvf bash-4.4.tar.gz
$ cd bash-4.4/
#Building, go grab something to drink. It's gonna be a while.
~/bash-4.4$ ./configure
~/bash-4.4$ make
#Check Version
~/bash-4.4$ ./bash -version
GNU bash, version 4.4.0(1)-release (x86_64-unknown-linux-gnu)
#Enter a clean interactive prompt
~/bash-4.4$ env -i PATH="$PWD:$PATH" ./bash --noprofile --norc
#Test example
bash-4.4$ mkdir album-0{1..2}
bash-4.4$ cd album*
bash: cd: too many arguments
Я никогда не сталкивался с этой проблемой, так как всегда использую вкладку «Завершение».
Итак, в вашем случае, вместо того, чтобы иметь неточное представление о том, какой каталог я хочу, я бы набрал cd al Tab, если есть только одно совпадение, завершает его, и если есть 2 или более завершений до того, где заканчивается совпадение, а TabTab перечисляет варианты.
Вот пример из моей системы:
cd Un Tab
cd Unknown
, за которым следует Tab Вкладка производит
Unknown/ Unknown Artist - Unknown Album/
Это выглядит как ошибка в 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; если обновление не устраняет проблему, вам необходимо повторить описанный выше процесс.
now
Чтобы ответить на ваш вопрос в этом конкретном случае, это работает
cd album*1
Но это, вероятно, не функциональность, которую вы действительно хотите.
Похоже, что config-top.h в Bash-4.4 обновлен, чтобы добавить следующий параметр
/* Define CD_COMPLAINS if you want the non-standard, but sometimes-desired
error messages about multiple directory arguments to `cd'. */
#define CD_COMPLAINS
И config-top.h ссылается на вашу ошибку здесь:
#if defined (CD_COMPLAINS)
else if (list->next)
{
builtin_error (_("too many arguments"));
return (EXECUTION_FAILURE);
}
#endif
Что я могу сделать в долгосрочной перспективе?:
Вы можете скомпилировать свой bash без нового Что я могу сделать в долгосрочной перспективе?: , но это будет утомительно. Вы можете переопределить функциональность cd, как предлагается здесь, или вы могли бы использовать функцию, подобную
cd "$(find $1* | head -1)"
. Докажите ее
Bash 4.4 Beta, где она все еще работает
#Pulling and unpacking source
$ wget https://ftp.gnu.org/gnu/bash/bash-4.4-beta.tar.gz
$ tar -xzvf bash-4.4-beta.tar.gz
$ cd bash-4.4-beta
#Building, go grab something to drink. It's gonna be a while.
~/bash-4.4-beta$ ./configure
~/bash-4.4-beta$ make
#Check Version
~/bash-4.4-beta$ ./bash --version
GNU bash, version 4.4.0(1)-beta (x86_64-unknown-linux-gnu)
#Enter a clean interactive prompt
~/bash-4.4-beta$ env -i PATH="$PWD:$PATH" ./bash --noprofile --norc
#Test example
bash-4.4$ mkdir album-0{1..2}
bash-4.4$ cd album* && pwd
/home/gkent/bash-4.4-beta/album0-1
Bash 4.4 Стабильный релиз, где он не работает
#Pulling and unpacking source
$ wget https://ftp.gnu.org/gnu/bash/bash-4.4.tar.gz
$ tar -zxvf bash-4.4.tar.gz
$ cd bash-4.4/
#Building, go grab something to drink. It's gonna be a while.
~/bash-4.4$ ./configure
~/bash-4.4$ make
#Check Version
~/bash-4.4$ ./bash -version
GNU bash, version 4.4.0(1)-release (x86_64-unknown-linux-gnu)
#Enter a clean interactive prompt
~/bash-4.4$ env -i PATH="$PWD:$PATH" ./bash --noprofile --norc
#Test example
bash-4.4$ mkdir album-0{1..2}
bash-4.4$ cd album*
bash: cd: too many arguments
Я никогда не сталкивался с этой проблемой, так как всегда использую вкладку «Завершение».
Итак, в вашем случае, вместо того, чтобы иметь неточное представление о том, какой каталог я хочу, я бы набрал cd al Tab, если есть только одно совпадение, завершает его, и если есть 2 или более завершений до того, где заканчивается совпадение, а TabTab перечисляет варианты.
Вот пример из моей системы:
cd Un Tab
cd Unknown
, за которым следует Tab Вкладка производит
Unknown/ Unknown Artist - Unknown Album/
Это выглядит как ошибка в 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; если обновление не устраняет проблему, вам необходимо повторить описанный выше процесс.
now
Чтобы ответить на ваш вопрос в этом конкретном случае, это работает
cd album*1
Но это, вероятно, не функциональность, которую вы действительно хотите.
Похоже, что config-top.h в Bash-4.4 обновлен, чтобы добавить следующий параметр
/* Define CD_COMPLAINS if you want the non-standard, but sometimes-desired
error messages about multiple directory arguments to `cd'. */
#define CD_COMPLAINS
И config-top.h ссылается на вашу ошибку здесь:
#if defined (CD_COMPLAINS)
else if (list->next)
{
builtin_error (_("too many arguments"));
return (EXECUTION_FAILURE);
}
#endif
Что я могу сделать в долгосрочной перспективе?:
Вы можете скомпилировать свой bash без нового Что я могу сделать в долгосрочной перспективе?: , но это будет утомительно. Вы можете переопределить функциональность cd, как предлагается здесь, или вы могли бы использовать функцию, подобную
cd "$(find $1* | head -1)"
. Докажите ее
Bash 4.4 Beta, где она все еще работает
#Pulling and unpacking source
$ wget https://ftp.gnu.org/gnu/bash/bash-4.4-beta.tar.gz
$ tar -xzvf bash-4.4-beta.tar.gz
$ cd bash-4.4-beta
#Building, go grab something to drink. It's gonna be a while.
~/bash-4.4-beta$ ./configure
~/bash-4.4-beta$ make
#Check Version
~/bash-4.4-beta$ ./bash --version
GNU bash, version 4.4.0(1)-beta (x86_64-unknown-linux-gnu)
#Enter a clean interactive prompt
~/bash-4.4-beta$ env -i PATH="$PWD:$PATH" ./bash --noprofile --norc
#Test example
bash-4.4$ mkdir album-0{1..2}
bash-4.4$ cd album* && pwd
/home/gkent/bash-4.4-beta/album0-1
Bash 4.4 Стабильный релиз, где он не работает
#Pulling and unpacking source
$ wget https://ftp.gnu.org/gnu/bash/bash-4.4.tar.gz
$ tar -zxvf bash-4.4.tar.gz
$ cd bash-4.4/
#Building, go grab something to drink. It's gonna be a while.
~/bash-4.4$ ./configure
~/bash-4.4$ make
#Check Version
~/bash-4.4$ ./bash -version
GNU bash, version 4.4.0(1)-release (x86_64-unknown-linux-gnu)
#Enter a clean interactive prompt
~/bash-4.4$ env -i PATH="$PWD:$PATH" ./bash --noprofile --norc
#Test example
bash-4.4$ mkdir album-0{1..2}
bash-4.4$ cd album*
bash: cd: too many arguments
Я никогда не сталкивался с этой проблемой, так как всегда использую вкладку «Завершение».
Итак, в вашем случае, вместо того, чтобы иметь неточное представление о том, какой каталог я хочу, я бы набрал cd al Tab, если есть только одно совпадение, завершает его, и если есть 2 или более завершений до того, где заканчивается совпадение, а TabTab перечисляет варианты.
Вот пример из моей системы:
cd Un Tab
cd Unknown
, за которым следует Tab Вкладка производит
Unknown/ Unknown Artist - Unknown Album/
Это выглядит как ошибка в 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; если обновление не устраняет проблему, вам необходимо повторить описанный выше процесс.
now
Чтобы ответить на ваш вопрос в этом конкретном случае, это работает
cd album*1
Но это, вероятно, не функциональность, которую вы действительно хотите.
Похоже, что config-top.h в Bash-4.4 обновлен, чтобы добавить следующий параметр
/* Define CD_COMPLAINS if you want the non-standard, but sometimes-desired
error messages about multiple directory arguments to `cd'. */
#define CD_COMPLAINS
И config-top.h ссылается на вашу ошибку здесь:
#if defined (CD_COMPLAINS)
else if (list->next)
{
builtin_error (_("too many arguments"));
return (EXECUTION_FAILURE);
}
#endif
Что я могу сделать в долгосрочной перспективе?:
Вы можете скомпилировать свой bash без нового Что я могу сделать в долгосрочной перспективе?: , но это будет утомительно. Вы можете переопределить функциональность cd, как предлагается здесь, или вы могли бы использовать функцию, подобную
cd "$(find $1* | head -1)"
. Докажите ее
Bash 4.4 Beta, где она все еще работает
#Pulling and unpacking source
$ wget https://ftp.gnu.org/gnu/bash/bash-4.4-beta.tar.gz
$ tar -xzvf bash-4.4-beta.tar.gz
$ cd bash-4.4-beta
#Building, go grab something to drink. It's gonna be a while.
~/bash-4.4-beta$ ./configure
~/bash-4.4-beta$ make
#Check Version
~/bash-4.4-beta$ ./bash --version
GNU bash, version 4.4.0(1)-beta (x86_64-unknown-linux-gnu)
#Enter a clean interactive prompt
~/bash-4.4-beta$ env -i PATH="$PWD:$PATH" ./bash --noprofile --norc
#Test example
bash-4.4$ mkdir album-0{1..2}
bash-4.4$ cd album* && pwd
/home/gkent/bash-4.4-beta/album0-1
Bash 4.4 Стабильный релиз, где он не работает
#Pulling and unpacking source
$ wget https://ftp.gnu.org/gnu/bash/bash-4.4.tar.gz
$ tar -zxvf bash-4.4.tar.gz
$ cd bash-4.4/
#Building, go grab something to drink. It's gonna be a while.
~/bash-4.4$ ./configure
~/bash-4.4$ make
#Check Version
~/bash-4.4$ ./bash -version
GNU bash, version 4.4.0(1)-release (x86_64-unknown-linux-gnu)
#Enter a clean interactive prompt
~/bash-4.4$ env -i PATH="$PWD:$PATH" ./bash --noprofile --norc
#Test example
bash-4.4$ mkdir album-0{1..2}
bash-4.4$ cd album*
bash: cd: too many arguments