web-dev-qa-db-fra.com

shell-init: erreur lors de l'extraction du répertoire actuel: getcwd - Les corrections habituelles ne

J'ai un script simple:

#!/bin/bash
for server in $(~/.ansible/ansible_hosts)
do
    ssh $server "hostname; readlink /opt/mydir/mylink;"
done

Cela fonctionne bien - le programme retourne le nom d’hôte et le lien corrects - sauf que j’obtiens l’erreur suivante sur certains serveurs mais pas tous:

Shell-init: erreur lors de l'extraction du répertoire en cours: getcwd: impossible d'accéder aux répertoires parents: aucun fichier ou répertoire de ce type

Tous les répertoires existent. L’une des suggestions les plus courantes a été d’ajouter un cd, un cd - ou un cd /. Tout ce qui se passe lorsque cette étape est ajoutée est un supplémentaire:

chdir: erreur lors de l'extraction du répertoire en cours: getcwd: impossible d'accéder aux répertoires parents: aucun fichier ou répertoire de ce type

J'ai essayé de relancer le démon nfs au cas où il y aurait une certaine confusion à propos de mon homedir et de substituer /etc/init.d au cas où le problème serait avec/opt. Aucune différence

Ce serait simplement une gêne, sauf que lorsque j'essaie d'utiliser un livre de lecture ansible au lieu d'une simple commande ssh, il échoue pour ce serveur.

Toutes les idées seraient appréciées.

8
Todd Ellner

Je crois que l'erreur n'est pas du tout liée au script. Le problème est le suivant: le répertoire dans lequel vous vous trouvez lorsque vous essayez d'exécuter le script n'existe plus. Par exemple, vous avez deux terminaux, cd somedir/ au premier puis mv somedir/ somewhere_else/ au second, puis essayez de courir dans le premier terminal - vous recevrez ce message d'erreur.

Au moins c'était dans mon cas.

18
Putnik

Vous exécutez ceci en tant que script .. $ (~/.ansible/ansible_hosts). Le $ () signifie que bash tentera d'exécuter ce script puis affichera les résultats.

Mais ce n'est pas un script, non? C'est une liste d'hôtes!

Ajoutez simplement le mot cat et cela devrait fonctionner.

#!/bin/bash
for server in $(cat ~/.ansible/ansible_hosts)
do
    ssh $server "hostname; readlink /opt/mydir/mylink;"
done
0
Jamieson Becker