Acabei de atualizar meu Ubuntu 16.04 para 17.04 e encontrei um pequeno problema com o cd
comando.
Digamos que eu tenho duas pastas: album-01
&album-02
No Ubuntu 16.04, se eu fizer cd album*
, irá para a primeira pasta encontradaalbum-01
Mas no novo Ubuntu 17.04, se eu fizer cd album*
isso me resulta
-bash: cd: too many arguments
Como fazer cd
no Ubuntu 17.04 como cd
no Ubuntu 16.04?
command-line
bash
cd-command
Hidayats
fonte
fonte
cd
indica dois locais e, de alguma forma, espera que ele descubra qual deles você deseja.Respostas:
Ainda não pude testar isso em um sistema 17.04 real (apenas verifiquei que ele funciona em 16.04), mas você poderá substituir o
cd
comando interno do Bash por sua própria função personalizada, que descarta quaisquer argumentos adicionais, exceto o primeiro. :Atualização: Conforme sugerido no comentário de @ muru , esta versão abaixo pode funcionar melhor e suportar chamadas
cd
sem argumentos:Depois de inserir esta linha acima em seu terminal, verifique se
cd
agora se comporta da maneira que deseja. Se for esse o caso, você pode tornar essa definição de função persistente anexando essa linha ao final do seu~/.bashrc
arquivo. Caso contrário, ele desaparecerá assim que você encerrar sua sessão atual do shell.Observe que, por qualquer motivo, você precise temporariamente usar o
cd
comando interno do Bash real em vez desta função personalizada, você pode simplesmente chamá-lo com, emcommand cd
vez de sem formataçãocd
.fonte
.sh
arquivo e criei um pseudônimo como:mcd="source /home/user/bin/cd.sh"
cd () { builtin cd "${@:1:1}"; }
vez disso.Resposta curta / Solução alternativa
Para responder sua pergunta neste caso exato, isso funciona
Mas provavelmente não é a funcionalidade que você realmente deseja.
O que mudou?
Parece que
config-top.h
no Bash-4.4 foi atualizado para adicionar a seguinte opçãoE
builtins/cd.def
refere-se ao seu erro aqui:O que posso fazer a longo prazo ?:
Você poderia compilar o seu próprio
bash
sem o novo CD_COMPLAINS , mas isso seria tedioso. Você pode redefinir acd
funcionalidade como sugerido aqui ou também pode usar uma função comoProvando
Bash 4.4 Beta, onde ainda funciona
Versão estável do Bash 4.4, onde não funciona
fonte
cd alb*1
, para combinar com o literal1
no final, mesmo sem os colchetes. Confundi sua ideia com outra coisa a princípio.Eu nunca encontrei esse problema, pois sempre uso a Conclusão de tabulação.
Portanto, no seu caso, em vez de ter um palpite impreciso sobre qual diretório eu quero, digitaria
cd al
Tabqual, se houver apenas uma correspondência, a completa e se houver duas ou mais, até onde termina a correspondência e TabTablista as opções.Aqui está um exemplo do meu sistema:
cd Un
Tabseguido por TabTabproduz
fonte
Isso parece um bug no Bash:
man builtins
pelo comportamento antigo é o correto.Você pode relatar o erro na
bug-bash
lista de discussão; mais detalhes aqui .Na verdade, o bug foi relatado (há muito tempo). Se você deseja um Bash fixo agora, agora, agora , veja como fazê-lo corretamente (testado em 17.10, também deve funcionar em outros).
Primeiro, crie um diretório para trabalhar, por exemplo:
Obtenha o pacote de origem e as dependências de compilação:
Edite
config-top.h
para alterar isso (deve ser a linha 32)para isso
Edite
debian/changelog
e adicione uma entrada como esta na parte superior (você também pode usar o comandodch -i
):Os pontos mais importantes são anexar
+foo
ao número da versão atual (foo
pode ser qualquer sequência de letras minúsculas; e, se você usardch -i
, ele aumentará o último número, portanto, será necessário revertê-lo para o atual) e usar o nome de versão correto (artful
aqui). Finalmente, corradpkg-source --commit
.Em seguida, você pode executar o
debuild
comando e, se tudo der certo (os errosdebsign
podem ser ignorados), você deverá ter alguns.deb
s no diretório pai, que pode ser instalado normalmente (não há necessidade de instalar todos eles, apenas os que você tenha agora; usedpkg -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
bash
; se a atualização não resolver o problema, você deverá repetir o processo acima.(Esta resposta foi postada pela primeira vez nesta pergunta duplicada .)
fonte