Comando cd comportamento [duplicado]

8

Desde o ubuntu 17.10, meus scripts não funcionam da mesma forma que costumavam fazer:

cd a*

mudaria o diretório para o primeiro diretório que começa com a . Agora, recebo este erro:

bash: cd: too many arguments

Acho que agora detecta vários argumentos devido aos vários diretórios que começam com a e geram um erro. Como eu poderia mudar o comportamento de cd para o jeito antigo?

    
por Aurelien 04.01.2018 / 11:58

2 respostas

4

Eu encontrei a mesma pergunta: Ubuntu 17.04 - bash: cd: muitos argumentos . Aparentemente é um bug.

A solução proposta aqui é criar uma função com base no comando cd incorporado que substitui seu comportamento:

cd(){ builtin cd "${@:1:1}"; }

Coloque a linha acima no início do seu script e use cd a* como no Ubuntu 16.04. Use export -f cd se você quiser usá-lo em um sub shell.

Você pode definir e exportar a função também no seu arquivo ~/.bashrc :

cd(){ builtin cd "${@:1:1}"; }
export -f cd
    
por pa4080 04.01.2018 / 12:44
8

Isso parece um bug no Bash: por man builtins , o comportamento antigo é o correto.

   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.

Você pode relatar o erro na lista de discussão bug-bash ; mais detalhes aqui .

Na verdade, o bug foi relatado (há muito tempo). Se você quer um Bash fixo agora, agora, agora , aqui está como fazê-lo corretamente (testado em 17.10, deve funcionar em outros também).

Primeiro, crie um diretório para trabalhar, por exemplo:

mkdir ~/bash
cd ~/bash

Obtenha o pacote de origem e as dependências de construção:

apt-get source bash
sudo apt-get build-dep bash
cd bash-4.4

Edite config-top.h para mudar isso (deve ser a linha 32)

#define CD_COMPLAINS

para isso

/* #define CD_COMPLAINS */

Edite debian/changelog e adicione uma entrada como esta no topo (você também pode usar o comando dch -i ):

bash (4.4-5ubuntu1+cd) artful; urgency=medium

  * Fix cd.

 -- Firas Kraiem <[email protected]>  Thu, 04 Jan 2018 21:11:22 +0900

Os pontos mais importantes são acrescentar +foo ao número da versão atual ( foo pode ser qualquer sequência de letras minúsculas; e tenha cuidado se você usar dch -i , irá incrementar o último número, então você precisa revertê-lo para o atual) e usar o nome de lançamento correto ( artful aqui). Finalmente, execute dpkg-source --commit .

Você pode então executar o comando debuild , e se tudo correr bem (erros sobre debsign podem ser ignorados) você deve ter alguns .deb s no diretório pai, que você pode instalar como de costume (existe não é necessário instalar todos eles, apenas os que você tem agora; use dpkg -l | grep bash para descobrir).

Observe que o número da versão do novo pacote está definido para que você obtenha automaticamente qualquer atualização futura para bash ; Se a atualização não corrigir o problema, você terá que repetir o processo acima.

    
por fkraiem 04.01.2018 / 12:29