Hallo zusammen,
ich wollte mir für mein aktuelles kleines Webprojekt auf Basis von diesem Artikel ein Bash Skript zusammen bauen, mit dem ich statischen Ressourcen einen hash verpassen kann, um langen Cache Zeiten entgegenzuwirken. Ich bin kein Profi was Bash Skripts angeht, aber ich bin auf meiner lokalen Maschine zu einem Ergebnis gekommen, mit dem ich absolut zufrieden bin. In den git Einstellungen im WCP habe ich zusätzliche Shell Befehle eingefügt um das Skript auszuführen, aber nach dem fetch des Repositories kam die Ernüchterung. Auf dem Server läuft das Skript in den Fehler.
./hash-static-resources.sh: line 38: /dev/fd/63: No such file or directory md5sum: write error
Wenn ich das Skript versuche über SSH auszuführen kommt eine ähnliche Fehlermeldung
./hash-static-resources.sh: line 38: /dev/fd/63: No such file or directory
bash-5.1$ find: 'md5sum' terminated by signal 13
Ich hab inzwischen fast alles (mir mögliche) versucht um diesen Fehler zu lösen und bin zu dem Schluss gekommen, dass ich jetzt einfach mal hier nachfrage.
/dev/fd ist auf dem Server nicht vorhanden, und ich schätze jetzt einfach mal, dass dadurch auch das Skript abraucht, wenn ich versuche process substitution in meinem Skript zu nutzen. Ist es in den Webhosting Verträgen schlichtweg einfach nicht möglich so "fortgeschrittene" Skripte auszuführen?
Die process substitution loszuwerden ist (zumindest für mich) nicht möglich, weil ich in einem while loop Zugriff auf eine globale Variable brauche. Siehe dazu mein minimales Beispiel
#!/usr/bin/env bash
function get_asset_md5sums {
find . \
-type f \
! -path "./.git/*" \
! -path "./.idea/*" \
\( -iname "*.css" -o \
-iname "*.js" -o \
-iname "*.avif" -o \
-iname "*.bmp" -o \
-iname "*.gif" -o \
-iname "*.heif" -o \
-iname "*.jpeg" -o \
-iname "*.jpg" -o \
-iname "*.png" -o \
-iname "*.svg" -o \
-iname "*.webp" \
\) \
-exec md5sum '{}' +
}
function main {
# Create a bash array for holding # "file=file_with_sum"
assets_array=()
# Get all asset MD5 checksums, put them into an assets array for later use
while read -r sum file; do
echo "$file"
echo "$sum"
assets_array+="file and file_with_sum in the correct format"
done < <(get_asset_md5sums)
# assets_array will be used later in another while loop
}
main
Alles anzeigen
Ich sag schonmal Danke für alle Vorschläge im Voraus.
Grüße
Maxi