cd dans le répertoire précédent sans écho du nom du répertoire

9

Cette réponse m'a donné un cd -raccourci pour passer à mon répertoire précédent dans Bash. Il a un problème majeur: il imprime le répertoire dans lequel il change, gaspillant mon espace d'écran, car ce répertoire est ensuite répété dans l'invite de la ligne suivante.

Je sais que je peux le faire cd $OLDPWD, également mentionné dans cette réponse, cd - >/dev/nullmais c'est beaucoup plus de frappe.

Dans la bashpage de manuel, il est écrit:

... ou si - est le premier argument et que le changement de répertoire est réussi, le nom de chemin absolu du nouveau répertoire de travail est écrit dans la sortie standard.

Comment puis-je faire -pour ne pas être le premier argument? En utilisant l'un des cdarguments facultatifs? Une autre façon de supprimer l'écho ou de minimiser la saisie sans avoir à définir de fonctions / alias sur chaque machine avec laquelle je travaille?

Ishran
la source
À peu près la même question ici ...
don_crissti

Réponses:

12

cdne prend en compte que le premier argument, en ignorant tous les autres. Aucune des options n'influence l'écho du chemin d'accès précédent (peut-être que le documenté -@a cet effet, mais c'est une option invalide sur mon système).

Si vous ne voulez pas utiliser d'alias / fonction, ce qui pourrait vous donner encore moins de caractères à taper cd -ou rediriger vers /dev/null, ma suggestion est de commencer à utiliser l'expansion spéciale tilde dans bash:

cd ~-

Depuis la bashpage de manuel:

Si le préfixe tilde est un `~ - ', la valeur de la variable shell OLDPWD, si elle est définie, est substituée.

Cela semble être un autre domaine dans bashlequel une signification particulière a été créée. Tilde extension fonctionne normalement sur la DIRSTACK $, manipulé / étudié par pushd, popdet dirs, il peut être utilisé dans d' autres commandes aussi bien ( cp ~-/somefile .) et si vous avez utilisé , pushdvous pouvez utiliser ~N(où N est un nombre de niveaux repoussé) pour se rendre à ces répertoires (pour cdou autres commandes).


BTW si vous avez des comptes sur plusieurs machines et en supposant que vous utilisez ssh pour vous y connecter à partir d'un seul endroit, vous devriez envisager d'ajouter à votre ~/.bashrc:

if [ -f ~/.bash_common ]; then
    . ~/.bash_common
fi

puis avoir un script sur votre machine de travail qui utilise scppour "pousser" bash_commonvers chacune de ces machines. De cette façon, vous pouvez ajouter et partager des fonctionnalités communes sur plusieurs machines avec un minimum de frais généraux.

Anthon
la source