staging.inyokaproject.org

Skript läuft unter Kubuntu aber nicht Mate

Status: Gelöst | Ubuntu-Version: Ubuntu MATE 16.04 (Xenial Xerus)
Antworten |

alfware17

Anmeldungsdatum:
15. Januar 2018

Beiträge: 6

Hallo zusammen, ich habe mir in einem Einsteigerkurs ein Kubuntu (16.04) in einer VM installiert und dort auf Anregung in der Konsole/Dolphin eine kleine Shell gebaut mit diesem Inhalt

1
for f in $1*; do mv "$f" "{f/$1/$2}"; done

.

Ausführbar gemacht und aufgerufen zB

1
./rename.sh bernd hugo

benennt mir das halt alle Dateien mit Namensteil bernd um in hugo an der Stelle.

bernd1 bernd2 alf3 → hugo1 hugo2 alf3

Da ich das kubuntu eh wieder wegwerfe, habe ich mir das abgeschrieben (mehrmals kontrolliert?!)

und wollte es in einer anderen VM ausprobieren, die Ubuntu 16.04 mit glaube Mate enthält.

Weder im Krusader noch direkt auf dem Terminal funktioniert aber diese Shell, im Terminal sah ich dann, daß anscheinend ein Syntaxproblem bei dem Ausdruck für das MV besteht, denn das Find wird noch ausgeführt.

Was mache ich falsch?

mv --help sieht m.E. beidesmal gleich aus

Warum geht es einmal, das andere Mal nicht

Bearbeitet von rklm:

Codeblöcke und Titel

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

alfware17 schrieb:

Da ich das kubuntu eh wieder wegwerfe, habe ich mir das abgeschrieben (mehrmals kontrolliert?!)

und wollte es in einer anderen VM ausprobieren, die Ubuntu 16.04 mit glaube Mate enthält.

Weder im Krusader noch direkt auf dem Terminal funktioniert aber diese Shell, im Terminal sah ich dann, daß anscheinend ein Syntaxproblem bei dem Ausdruck für das MV besteht, denn das Find wird noch ausgeführt.

Da ist kein find. In dem Skript oben gibt es lediglich Shell-Globbing. Hast Du vielleicht ein anderes Skript gemeint?

Und bitte, wenn es da Fehlermeldungen gibt, dann teile die hier exakt mit. Sonst können wir damit nix machen.

Was mache ich falsch?

Warum geht es einmal, das andere Mal nicht

Möglicherweise hast Du einfach nur die Shebang-Zeile vergessen, so dass Du nicht sicher festgelegt hast, dass die bash das ausführen soll. Die sh z.B. kennt diese Ersetzungen mit einer Variablen nicht.

Du fügst als erste Zeile in das Skript folgendes ein:

1
#!/bin/bash

Dann probier es noch mal aus.

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11278

Der Ausdruck schlägt auch fehl, wenn es keine Dateien gibt, die mit dem Wert von $1 beginnen und die Shell-Option nullglob (vgl. z.B. https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html#The-Shopt-Builtin) nicht gesetzt ist.

Denn dann setzt die for-Schleife z.B. die Variable f='bernd*' und eine Datei mit dem Namen existiert höchstwahrscheinlich nicht, weshalb mv meckert.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

seahawk1986 schrieb:

Denn dann setzt die for-Schleife z.B. die Variable f='bernd*' und eine Datei mit dem Namen existiert höchstwahrscheinlich nicht, weshalb mv meckert.

Wir kennen ja leider die Fehlermeldung nicht. Es könnte auch die sein:

1
2
3
4
5
6
7
$ bash -xc 'f="afoob"; echo "${f/$1/$2}"' -- foo bar
+ f=afoob
+ echo abarb
abarb
$ sh -xc 'f="afoob"; echo "${f/$1/$2}"' -- foo bar
+ f=afoob
--: 1: --: Bad substitution

alfware17

(Themenstarter)

Anmeldungsdatum:
15. Januar 2018

Beiträge: 6

Hallo,

habe das mit der bash-Zeile probiert - leider geht es immer noch nicht ☹

Die "Fehlermeldung" heißt, es gibt die Datei nicht (bernd1 bzw. bernd2)

und naja, die wird eben auch für jeden gefundenen Treffer so ausgegeben.

Das wollte ich mit Find sagen.

Könnt Ihr meinen Screenshot sehen? (ich selbst nämlich anscheinend nicht).

Habe die rename.sh nach dem Ändern auch gespeichert....

Danke schon mal für Eure Mühe.

Anhang

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11278

Ah, du hast ein Dollar-Zeichen vergessen - da hatten wir alle Tomaten auf den Augen ...

alfware17 schrieb:

1
for f in $1*; do mv "$f" "{f/$1/$2}"; done

Das sollte eher so aussehen:

1
2
3
#!/bin/bash
shopt -s nullglob
for f in "$1"*; do mv "$f" "${f/$1/$2}"; done

alfware17

(Themenstarter)

Anmeldungsdatum:
15. Januar 2018

Beiträge: 6

Oh ja 🙄 Cool, jetzt läufts. ☺ siehe Screenshot.

Habe noch einen Stern hinzugefügt, dann wird die Kette auch mittendrin erkannt.

#!/bin/bash
shopt -s nullglob
for f in *"$1"*; do mv "$f" "${f/$1/$2}"; done

Übrigens war mein Fehler schon letzte Woche, wo ich das kubuntu-Script → Textdatei(Forenbeitrag) abgeschrieben habe

Und nicht heute, wo ich von da eben falsch abgetippt habe, nicht vom kubuntu-Script original 🙄

Nun kann natürlich einer fragen, warum ich die rename.sh nicht einfach über den gemeinsamen Ordner von einer VM in die andere geschoben habe.

Nunja, weil ich das nur 2 Wochen notwendige kubuntu schlampig in der VM installiert hatte, ohne freigegebenen Ordner.

Danke euch.

Anhang

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

Bitte keine Images von Texten posten.

Man kann den Text nicht kopieren, der Text kann nicht indiziert werden, Screenreader können es nicht vorlesen.

Mit der Maus den ganzen Bereich markieren, mit einem Mittelklick hier ins Editfenster kopieren, wieder markieren und als Code formatieren (3. Button v.r., Textseite mit Zahnrad). Ist auch schneller, für Schreiber & Leser bequemer und weniger Bandbreite frisst es auch.

Antworten |