Bash-shell-scripting-Syntax-Probleme: das Ziel ist nicht, ein Verzeichnis?
Ich bin versucht, eine Datei zu kopieren, um eine Reihe von Ordnern vorhanden, die in einem Verzeichnis. Der Ordner gespeichert wurden, in propagation.txt
und Sie sind wie:
sfproject/folder1
sfproject/folder2
Den code, den ich bin versucht zu laufen, ist :
for x in `cat propagation.txt`
do cp php.ini $x ; echo "Copied php.ini to $x"
done
echo "Finished";
Aber es besagt, dass:
cp : 'target: 'propagation.txt' is not a text'
Dies ist, was propagation.txt besteht aus:
sfproject/apps/backend/modules/users/lib
sfproject/apps/backend/templates
sfproject/apps/frontend/config
sfproject/apps/frontend/lib
sfproject/apps/frontend/modules/EdboostSatGuide/actions
sfproject/apps/frontend/modules/EdboostSatGuide/templates
sfproject/apps/frontend/modules/dashboard/actions
sfproject/apps/frontend/modules/dashboard/templates
sfproject/apps/frontend/modules/quizzes/actions
sfproject/apps/frontend/modules/quizzes/templates
sfproject/apps/frontend/templates
sfproject/cache/frontend/prod/config
"nicht-text"? Weder ich, noch google sind nicht so bewusst cp-Ausgang. Ist es richtig? Können Sie verschieben echo vor dem cp und log zeigen. Und laufen
Bearbeiten Sie Ihre Frage umfassen 2-3-line-Probe von dem, was in propagation.txt. Viel Glück.
Ihr Titel sagt: "Ziel ist kein Verzeichnis"; Ihre Frage sagt: "Ziel ist nicht ein text". Ist der Titel korrekt ist, und die Frage falsch? Wenn dem so ist, macht es Sinn, wenn nicht, dann die 'kein text' Fehlermeldung keinen Sinn macht (ist der nicht-Sinn oder möglicherweise auch Unsinn). Es gibt immer noch einige Rätsel zu lösen, aber zumindest den Widerspruch zwischen Titel und die Frage wäre klar, wenn die es Lesen sollten 'ist kein Verzeichnis".
which cp
auf Ihrem systemBearbeiten Sie Ihre Frage umfassen 2-3-line-Probe von dem, was in propagation.txt. Viel Glück.
Ihr Titel sagt: "Ziel ist kein Verzeichnis"; Ihre Frage sagt: "Ziel ist nicht ein text". Ist der Titel korrekt ist, und die Frage falsch? Wenn dem so ist, macht es Sinn, wenn nicht, dann die 'kein text' Fehlermeldung keinen Sinn macht (ist der nicht-Sinn oder möglicherweise auch Unsinn). Es gibt immer noch einige Rätsel zu lösen, aber zumindest den Widerspruch zwischen Titel und die Frage wäre klar, wenn die es Lesen sollten 'ist kein Verzeichnis".
InformationsquelleAutor user1020069 | 2012-03-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
"Ziel ist kein Verzeichnis" ist ein
cp
Fehler. Es passiert, wenn man drei oder mehr Argumente und das Letzte argument ist ein Dateisystem-Objekt, das ist nicht ein Verzeichnis!Natürlich
cp a b
funktioniert, wenn
b
ist eine normale Datei, und kein Verzeichnis.b
wird einfach ersetzt mita
. Abercp a b c
bedeutet, machen Sie eine Kopie von
a
undb
inside-Verzeichnisc
.Es ist nicht klar, wie dieses problem könnte passieren
cp php.ini $x
, da die Schleife die variable$x
ist die Iteration über die Ergebnisse dercat ...
Prozess der substitution. Der Prozess der substitution erfährt word-splitting und die split-Stücke zugeordnet sindx
eins nach dem anderen. Für Ihrecp
am Ende mit drei oder mehr Argumente,$x
müsste irgendwie erweitern Sie in zwei Argumente.Post die tatsächliche verbatim fehlerhaften code und einige Beispiel-Daten.
Auf einem verwandten beachten, wenn Sie ein Leerzeichen in einigen von den Pfad-Namen, es wird am besten sein, legen Sie Sie auf separaten Zeilen in
propagation.txt
und dann Bearbeiten Sie es wie folgt:InformationsquelleAutor Kaz
Sollte es funktionieren, ändern Sie die "do cp php.ini" zu "do echo cp php.ini" und sehen, was Sie bekommen.
Ich habe Ihre propagation.txt die Datei-Inhalte und ändern Sie das Skript : for x in
cat propagation.txt
; do echo '(' cp php.ini $x ')' ; echo "Kopiert php.ini $x" ; done; echo "Fertig"; es druckt, was gesendet wird, der Befehl cp. Sehen Sie, wenn Sie bekommen, was Sie erwartetInformationsquelleAutor pizza
Basierend auf Ihren Kommentar zu @pizza, ich bin mir ziemlich sicher, dass Ihre eigentliche script ist nicht das, was in der Frage. Ich vermute, dass Sie möglicherweise die falsche Art von Anführungszeichen
cat propagation.txt
, d.h.statt
...oder vielleicht irgendeine Art von "smart quote" oder ähnliches. Ich werde empfehlen die Verwendung
$()
statt backquotes; Sie tun im Grunde das gleiche, aber die syntax ist sauberer, wenn du tust komplizierte Dinge, und Sie sind viel schwerer zu versehentlich für etwas anderes. Also versuchen Sie dies:InformationsquelleAutor Gordon Davisson