Question pourquoi "cd -" dans le fichier .sh imprimera l'adresse


J'utilise "cd -" pour basculer entre les dossiers. comme:

cd /etc/                                                                                                                          
cd -   

mais pourquoi "cd -" imprimera l'adresse (comme pwd)? Comment puis-je l'arrêter pour imprimer l'adresse?


4
2018-01-19 05:16


origine




Réponses:


SUS4 dit:

Quand un - est utilisé comme opérande, cela doit être équivalent à la commande:

    cd "$OLDPWD" && pwd

qui passe au répertoire de travail précédent et écrit ensuite son nom.

Donc, si vous ne voulez pas imprimer la moitié du comportement, faites simplement le premier bit:

cd "$OLDPWD"

Ou l'équivalent d'expansion tilde

cd ~-

Souvent, si vous en avez besoin, pushd / popd est un choix meilleur mais moins portable.


13
2018-01-19 05:26



+1, je ne sais pas pourquoi cela a été abaissé car cela explique certainement Pourquoi il fait ce qu'il fait. Ajout du bit qui montre comment le réparer. - paxdiablo
Dunno Aussi ajouté ~-, pushd, popd - ormaaj


Il suffit de rediriger la sortie standard vers le trou noir comme ceci

cd - > /dev/null

1
2018-01-19 05:18



Je n'aime pas ça, parce que ça double le travail: d'abord est-ce qu'un pwd qui est que redirigé vers /dev/null. Pourquoi ne pas simplement utiliser cd $OLDPWD comme ormaaj le suggère? - Andreas Florath
Parce que c'est plus typé? Et il utilise une variable d'environnement «magique»? Accordé, cd - est aussi un peu magique, mais au moins, il est plus facile de se souvenir. - JvO
Cette méthode est bien. Ce n'est pas du "double travail", c'est juste cacher la sortie (le shell n'a pas à parcourir toutes les étapes nécessaires pour exécuter deux commandes). Vous devez également masquer la sortie de la même manière si vous utilisez pushd/popd dans un script. - ormaaj


Le plus simple est de ne pas l'utiliser. Exécutez les commandes dans un shell distinct:

(cd /etc/; ... )

Cela ne modifie pas le répertoire de travail actuel du shell 'main'. Ceci est généralement plus robuste que l'utilisation OLDPWD parce que vous pouvez avoir beaucoup cd commandes ici comme

(cd /etc; ... ; cd /tmp; ... )

0
2018-01-19 10:05



Cela a une sémantique différente (surtout si ... change l'environnement) et crée un processus supplémentaire. - Mat
Sémantique différente à quoi? À mon humble avis, il est complètement difficile de savoir ce qui se passe entre le cd /etc et le cd -. S'il y a des changements d'environnement, vous avez complètement raison. S'il y a d'autres cds que peut-être c'est la meilleure façon. - Andreas Florath
Ce que je veux dire c'est que (cd /etc; FOO=bar) et cd /etc; FOO=bar; cd -; ne faites pas la même chose. - Mat