Update Skript für Drupal 9

Cool Master

Fleet Admiral
Registriert
Dez. 2005
Beiträge
37.475
Moin,

ich habe bis dato immer "drush" für Drupal 7 und 8 benutzt, leider geht das nicht mehr so einfach für Drupal 9 da man nun mit composer arbeiten muss was mir zu viel Aufwand ist da ich im Prinzip immer ein Standard-Drupal von drupal.org lade. Ich habe mir deswegen ein Update-Skript geschrieben was bis auf einen Schritt auch klappt:

Bash:
#!/bin/bash

echo "Wurde die neuste Drupal version geladen, entpackt und die Webseite in den Wartungsmodus versetzt? Bitte mit '1' oder '2' antworten"
select yn in "Ja" "Nein"; do
case $yn in
        Ja )
                # Backup erstellen:
                /usr/bin/cp -r /var/www/example.com/web /srv/drupal-update-skript/backups/example.com-web

                # Alte Drupal Core Verzeichnisse löschen:
                /usr/bin/rm -rf /var/www/example.com/web/core
                /usr/bin/rm -rf /var/www/example.com/web/vendor

                # Dateien löschen:
                /usr/bin/rm -f /var/www/example.com/web/*.* .[a-z]*

                # Neue Dateien kopieren:
                /usr/bin/cp -R /srv/drupal-update-skript/drupal-*/core /var/www/example.com/web/
                /usr/bin/cp -R /srv/drupal-update-skript/drupal-*/vendor /var/www/example.com/web/
                /usr/bin/cp /srv/drupal-update-skript/drupal-*/*.* .[a-z]* /var/www/example.com/web/

                #Ausgabe, dass alles erledigt ist:
                echo "Update wurde abgeschlossen. Bitte auf https://example.com/update.php gehen."

                break;;
        Nein )
                exit;;
esac
done

Es klappt alles bis auf diese Zeile:

Bash:
/usr/bin/cp /srv/drupal-update-skript/drupal-*/*.* .[a-z]* /var/www/example.com/web/

Da kommt dann der Fehler:

"/usr/bin/cp: cannot stat '.[a-z]*': No such file or directory"

Gehe ich aber ich den drupal Ordner und mache:

Bash:
cp *.* .[a-z]* /var/www/example.com/web/

klappt es.

Muss ich da etwas escapen oder warum genau klappt das im Skript nicht?
 
Moin auch,
gerade mal getestet:
Bash:
pd@di15 ~/testdir
$ cp -v .[a-z]* deleteme/
cp: cannot stat '.[a-z]*': No such file or directory

pd@di15 ~/testdir
$ touch .test

pd@di15 ~/testdir
$ cp -v .[a-z]* deleteme/
'.test' -> 'deleteme/.test'

pd@di15 ~/testdir
$ ls -la deleteme
total 8.0K
drwxrwxr-x+ 1 pd None 0 Mar  5 13:41 ./
drwxrwx---+ 1 pd None 0 Mar  5 13:41 ../
-rw-rw-r--+ 1 pd None 0 Mar  5 13:41 .test

Deine "Fehlermeldung" besagt also nur, dass da keine entsprechende Datei gefunden wurde - was nicht verwundert, weil Du alle entsprechenden Dateien vorher mit
Cool Master schrieb:
# Dateien löschen: /usr/bin/rm -f /var/www/example.com/web/. .[a-z]*
gelöscht hast.
Ist Dir klar, dass Du mit ".[a-z]*" im aktuellen Verzeichnis operierst und nicht im vorher benutzten??

Nachtrag (nicht böse gemeint): Deine Überschrift ist zwar sachlich nicht falsch, geht aber am Problem vorbei, denn das ist bash-bezogen und hat eigentlich wenig mit Drupal zu tun.
 
Phrasendreher schrieb:
weil Du alle entsprechenden Dateien vorher mit ... gelöscht hast.

Ja das soll ja so sein. In Zeile 15 wird gelöscht und in Zeile 20 sollte kopiert werden.

Phrasendreher schrieb:
Ist Dir klar, dass Du mit ".[a-z]*" im aktuellen Verzeichnis operierst

Als Referenz das hier ist die Anleitung auf Drupal:

https://www.drupal.org/docs/updating-drupal/updating-drupal-core-manually

Die beginnt ab Punkt 4. Zeile 11 und 12 ist also 4.2. Zeile 15 ist 4.3.

6.2 ist Zeile 18, 19 und 20.

Ich nutze den vollen Pfad in Zeile 20. Damit sollte es doch gehen oder langt das nicht?
 
Cool Master schrieb:
Ich nutze den vollen Pfad in Zeile 20. Damit sollte es doch gehen oder langt das nicht?
Da gibt es ein gravierendes Problem:
Während in der Anleitung (wie von Dir verlinkt) vorher der aktive Pfad gewechselt wird mit
Code:
cd /path/to/your/drupal/directory
vor dem Löschen und
Code:
cd drupal-x.y.z
vor dem Kopieren, machst Du das in Deinem Skript nicht.

In Deiner Zeile 20
Cool Master schrieb:
/usr/bin/cp /srv/drupal-update-skript/drupal-/.* .[a-z]* /var/www/example.com/web/
kopierst Du beim ersten Parameter mit vollem Pfad, beim zweiten (der ja ebenfalls kopiert wird) aber nicht - hier wird der Pfad genutzt, welchen Du bei Ausfuehrung des Skripts aktiv hast.
Zuvor werden mit Deiner Zeile 15
Cool Master schrieb:
/usr/bin/rm -f /var/www/example.com/web/. .[a-z]*
aber schon alle Dateien des Schemas in besagtem Verzeichnis gelöscht (zweiter Parameter ohne vollen Pfad)

Es gilt schon immer: Vorsicht mit rm -f!

Lösung wäre also, entweder mit "cd" das jeweilige Arbeitsverzeichnis anzusteuern oder bei allen Parametern in den Zeilen 15 und 20 den vollen Pfad zu nutzen.

Hoffe dass Du bis hierher noch keinen Datenverlust erleiden musstest.
 
Zurück
Oben