Je viens de mettre à jour mon Ubuntu 16.04 vers 17.04 et j'ai trouvé un petit problème avec la cd
commande.
Disons que j'ai deux dossiers: album-01
&album-02
Dans Ubuntu 16.04, si je le fais, cd album*
il ira dans le premier dossier trouvéalbum-01
Mais dans le nouveau Ubuntu 17.04, si je le fais, cd album*
cela me
-bash: cd: too many arguments
Comment faire cd
dans Ubuntu 17.04 comme cd
dans Ubuntu 16.04?
command-line
bash
cd-command
Hidayats
la source
la source
cd
deux emplacements, et attendez-vous à ce qu'il trouve celui que vous voulez.Réponses:
Je n'ai pas encore pu tester cela sur un vrai système 17.04 (seulement vérifié qu'il fonctionne sur 16.04), mais vous devriez pouvoir remplacer la commande
cd
intégrée Bash avec votre propre fonction personnalisée, qui rejette tous les arguments supplémentaires, sauf le premier :Mise à jour: Comme suggéré dans le commentaire de @ muru , cette version ci-dessous pourrait mieux fonctionner et prendre en charge les appels
cd
sans arguments cependant:Après avoir entré cette ligne ci-dessus dans votre terminal, vérifiez s'il
cd
se comporte maintenant comme vous le souhaitez. Si tel est le cas, vous pouvez rendre cette définition de fonction persistante en ajoutant cette ligne à la fin de votre~/.bashrc
fichier. Sinon, il disparaîtra dès que vous aurez terminé votre session shell actuelle.Notez que si pour une raison quelconque vous devez temporairement utiliser la vraie
cd
commande intégrée Bash au lieu de cette fonction personnalisée, vous pouvez simplement l'appeler aveccommand cd
au lieu de plaincd
.la source
.sh
fichier puis créé un alias comme:mcd="source /home/user/bin/cd.sh"
cd () { builtin cd "${@:1:1}"; }
plutôt.Réponse courte / solution de contournement
Pour répondre à votre question dans ce cas précis, cela fonctionne
Mais ce n'est probablement pas la fonctionnalité que vous voulez vraiment.
Qu'est ce qui a changé?
Il semble que
config-top.h
dans Bash-4.4 a été mis à jour pour ajouter l'option suivanteEt
builtins/cd.def
fait référence à votre erreur ici:Que puis-je faire à long terme?:
Vous pourriez compiler le vôtre
bash
sans les nouveaux CD_COMPLAINS , mais cela deviendrait fastidieux. Vous pouvez redéfinir lescd
fonctionnalités comme suggéré ici ou vous pouvez alias une fonction commeLe prouver
Bash 4.4 Beta où cela fonctionne toujours
Version stable de Bash 4.4 là où cela ne fonctionne pas
la source
cd alb*1
, pour faire correspondre le littéral1
à la fin même sans les crochets. J'ai confondu votre idée avec autre chose au début.Je n'ai jamais rencontré ce problème car j'utilise toujours la complétion de tabulation.
Donc, dans votre cas, plutôt que d'avoir une supposition imprécise sur le répertoire que je veux, je taperais
cd al
Tablequel s'il n'y a qu'une seule correspondance, le complète et s'il y en a 2 ou plus complète jusqu'à la fin de la correspondance et TabTabrépertorie les choix.Voici un exemple de mon système:
cd Un
Tabsuivi par TabTabproduit
la source
Cela ressemble à un bogue dans Bash:
man builtins
l'ancien comportement est le bon.Vous pouvez signaler le bogue sur la
bug-bash
liste de diffusion; plus de détails ici .En fait, le bug a été signalé (il y a longtemps). Si vous voulez un Bash fixe maintenant, maintenant, maintenant , voici comment le faire correctement (testé le 17.10, devrait également fonctionner sur d'autres).
Créez d'abord un répertoire dans lequel travailler, par exemple:
Obtenez le package source et les dépendances de génération:
Modifier
config-top.h
pour changer cela (devrait être la ligne 32)pour ça
Modifiez
debian/changelog
et ajoutez une entrée comme celle-ci en haut (vous pouvez également utiliser la commandedch -i
):Les points les plus importants sont d'ajouter
+foo
au numéro de version actuel (foo
peut être n'importe quelle chaîne de lettres minuscules; et soyez prudent si vous utilisezdch -i
, il incrémentera le dernier numéro, vous devez donc le revenir à la version actuelle) et utiliser le nom correct de la version (artful
ici). Enfin, exécutezdpkg-source --commit
.Vous pouvez ensuite exécuter la
debuild
commande, et si tout se passe bien (les erreursdebsign
peuvent être ignorées), vous devriez avoir des.deb
s dans le répertoire parent, que vous pouvez installer comme d'habitude (il n'est pas nécessaire de les installer tous, juste ceux que vous maintenant; utilisezdpkg -l | grep bash
pour le savoir).Notez que le numéro de version du nouveau package est défini de sorte que vous obtiendrez automatiquement toute future mise à jour vers
bash
; si la mise à jour ne résout pas le problème, vous devez répéter le processus ci-dessus.(Cette réponse a d'abord été publiée sur cette question en double .)
la source