it-swarm.com.de

shell-init: Fehler beim Abrufen des aktuellen Verzeichnisses: getcwd - Die üblichen Korrekturen funktionieren nicht

Ich habe ein einfaches Skript:

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

Es funktioniert gut - das Programm gibt den korrekten Hostnamen und den richtigen Link zurück - mit der Ausnahme, dass auf einigen, aber nicht auf allen Servern der folgende Fehler angezeigt wird:

Shell-init: Fehler beim Abrufen des aktuellen Verzeichnisses: getcwd: Zugriff auf übergeordnete Verzeichnisse nicht möglich: Keine solche Datei oder Verzeichnis

Alle Verzeichnisse sind vorhanden. Einer der häufigsten Vorschläge war das Hinzufügen einer CD, einer CD - oder einer CD /. Alles, was passiert, wenn dieser Schritt hinzugefügt wird, ist ein zusätzliches:

chdir: Fehler beim Abrufen des aktuellen Verzeichnisses: getcwd: Zugriff auf übergeordnete Verzeichnisse nicht möglich: Keine solche Datei oder Verzeichnis

Ich habe versucht, den nfs-Dämon zu starten, weil sich meine Homedir etwas verwirrt hat, und /etc/init.d ersetzt, falls das Problem mit/opt lag. Kein Unterschied

Dies wäre einfach ein Ärgernis, außer wenn ich versuche, ein ansehnliches Playbook anstelle eines einfachen ssh-Befehls zu verwenden, schlägt es für diesen Server fehl.

Alle Erkenntnisse wären dankbar.

8
Todd Ellner

Ich glaube, der Fehler hat überhaupt nichts mit dem Skript zu tun. Das Problem ist: Das Verzeichnis, in dem Sie sich befinden, wenn Sie versuchen, das Skript auszuführen, ist nicht mehr vorhanden. Beispielsweise haben Sie zwei Terminals, cd somedir/ am ersten und mv somedir/ somewhere_else/ am zweiten. Versuchen Sie dann, das erste Terminal auszuführen - Sie erhalten diese Fehlermeldung.

Zumindest war das in meinem Fall so.

18
Putnik

Sie führen dies als Skript aus. $ (~/.Ansible/ansible_hosts). $ () Bedeutet, dass bash versucht, das Skript auszuführen und dann die Ergebnisse auszugeben.

Aber es ist kein Skript, richtig? Es ist eine Liste von Hosts!

Fügen Sie einfach das Wort cat hinzu und es sollte funktionieren.

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