shell script works embedded, in Terminal - not as external


If I link the shell script that works in the terminal as an external shell script in an action, it reports “error code 1” and terminates the script.
Why?

What do I need to change so that the shell script works as an external shell script?

A PDF with a QR code is read with “zbarimg” and the content is edited with the commands and “sed”.
The result is appended as a new file name to the name of the input file (“$1”).
Input file: zz.pdf
Expected result: “zz_CK00038061.pdf”
embedded script
- Code: Select all
# Überprüfen, ob ein Bildpfad als Argument übergeben wurde
if [ -z "$1" ]; then
echo "Nutzung: $0 <Pfad_zum_QR-Code-Bild>"
echo "Beispiel: $0 qrcode.png"
exit 1
fi
# Den QR-Code aus dem Bild lesen und die Ausgabe filtern.
# Wir nutzen sed, um den festen Präfix "QR" gefolgt von 6 beliebigen Zeichen zu entfernen.
# Der folgende Text "CK" gefolgt von 8 Zahlen wird extrahiert.
# Die Zeile muss mit diesen 8 Zahlen enden.
result=$(zbarimg -Sdisable -Sqrcode.enable "$1" 2>/dev/null | sed -n 's/^[qQ][rR]......\([cC][kK][0-9]\{8\}\)$/\1/p' | tr '[:lower:]' '[:upper:]')
# Überprüfen, ob ein Ergebnis vorhanden ist
if [ -z "$result" ]; then
echo "Kein QR-Code im Bild gefunden oder der Inhalt entspricht nicht dem erwarteten Format."
exit 1
fi
# Dateipfad und Dateiname extrahieren
filepath=$(dirname "$1")
filename=$(basename "$1")
extension="${filename##*.}"
filename_no_ext="${filename%.*}"
# Sonderzeichen im ausgelesenen Ergebnis durch Unterstrich ersetzen,
# um einen gültigen Dateinamen zu gewährleisten.
sanitized_result=$(echo "$result" | sed -e 's/[\\/:*?\"<>|]//g' -e 's/ /_/g')
new_filename="${filename_no_ext}_${sanitized_result}.${extension}"
# Der vollständige neue Pfad
new_filepath="${filepath}/${new_filename}"
# Datei umbenennen
if mv "$1" "$new_filepath"; then
echo "Datei wurde erfolgreich umbenannt zu: '$new_filepath'"
else
echo "Fehler beim Umbenennen der Datei '$1'."
exit 1
fi
echo "Der ausgelesene QR-Code-Inhalt war: '$result'"
external script
- Code: Select all
#!/bin/zsh
# Überprüfen, ob ein Bildpfad als Argument übergeben wurde
if [ -z "$1" ]; then
echo "Nutzung: $0 <Pfad_zum_QR-Code-Bild>"
echo "Beispiel: $0 qrcode.png"
exit 1
fi
# Den QR-Code aus dem Bild lesen und die Ausgabe filtern.
# Wir nutzen sed, um den festen Präfix "QR" gefolgt von 6 beliebigen Zeichen zu entfernen.
# Der folgende Text "CK" gefolgt von 8 Zahlen wird extrahiert.
# Die Zeile muss mit diesen 8 Zahlen enden.
result=$(zbarimg -Sdisable -Sqrcode.enable "$1" 2>/dev/null | sed -n 's/^[qQ][rR]......\([cC][kK][0-9]\{8\}\)$/\1/p' | tr '[:lower:]' '[:upper:]')
# Überprüfen, ob ein Ergebnis vorhanden ist
if [ -z "$result" ]; then
echo "Kein QR-Code im Bild gefunden oder der Inhalt entspricht nicht dem erwarteten Format."
exit 1
fi
# Dateipfad und Dateiname extrahieren
filepath=$(dirname "$1")
filename=$(basename "$1")
extension="${filename##*.}"
filename_no_ext="${filename%.*}"
# Sonderzeichen im ausgelesenen Ergebnis durch Unterstrich ersetzen,
# um einen gültigen Dateinamen zu gewährleisten.
sanitized_result=$(echo "$result" | sed -e 's/[\\/:*?\"<>|]//g' -e 's/ /_/g')
new_filename="${filename_no_ext}_${sanitized_result}.${extension}"
# Der vollständige neue Pfad
new_filepath="${filepath}/${new_filename}"
# Datei umbenennen
if mv "$1" "$new_filepath"; then
echo "Datei wurde erfolgreich umbenannt zu: '$new_filepath'"
else
echo "Fehler beim Umbenennen der Datei '$1'."
exit 1
fi
echo "Der ausgelesene QR-Code-Inhalt war: '$result'"
Exit of shell script
- Code: Select all
[color=#FF0000]# Überprüfen, ob ein Ergebnis vorhanden ist
if [ -z "$result" ]; then
echo "Kein QR-Code im Bild gefunden oder der Inhalt entspricht nicht dem erwarteten Format."
exit 1
fi[/color]
Debug.log
- Code: Select all
2025-06-12 21:43:29.993 hazelworker[41531] Running worker (v6.0.4) for folder with identifier: 16777233-263544522.
2025-06-12 21:43:29.995 hazelworker[41531] ###Arch: arm64
2025-06-12 21:43:29.995 hazelworker[41531] ###main load address: 0x1002ac000
2025-06-12 21:43:29.995 hazelworker[41531] ###Hazel Core load address: 0x10047c000
2025-06-12 21:43:29.995 hazelworker[41531] ###Noodle load address: 0x10088c000
2025-06-12 21:43:29.995 hazelworker[41531] ###CK load address: 0x100364000
2025-06-12 21:43:30.000 hazelworker[41531] DEBUG: Program is licensed.
2025-06-12 21:43:30.406 hazelworker[41531] DEBUG: Error reading file /Users/mueller/Library/Application Support/Firefox/prefs.js: Error Domain=NSCocoaErrorDomain Code=260 "The file “prefs.js” couldn’t be opened because there is no such file." UserInfo={NSFilePath=/Users/mueller/Library/Application Support/Firefox/prefs.js, NSURL=file:///Users/mueller/Library/Application%20Support/Firefox/prefs.js, NSUnderlyingError=0x6000032e7570 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}}
2025-06-12 21:43:30.407 hazelworker[41531] DEBUG: Could not find entry for default_directory in Chrome preference file.
2025-06-12 21:43:30.408 hazelworker[41531] DEBUG: Could not find entry for download in Chrome preference file.
2025-06-12 21:43:30.409 hazelworker[41531] Processing folder Test (forced)
2025-06-12 21:43:30.409 hazelworker[41531] DEBUG: Pausing to wait for things to settle down.
2025-06-12 21:43:32.484 hazelworker[41531] DEBUG: Processing directories: (
"/Users/mueller/Downloads/Test"
)
2025-06-12 21:43:32.486 hazelworker[41531] DEBUG: Received file event: {
date = "2025-06-12 19:43:29 +0000";
path = "<NoodlePathSet: 0x600003cfcd00>\n /Users/mueller/Downloads/Test : 18446744073709551615\n";
}
2025-06-12 21:43:32.486 hazelworker[41531] DEBUG: About to process directory /Users/mueller/Downloads/Test
2025-06-12 21:43:32.535 hazelworker[41531][PREDICTION] DEBUG: Calculating fire time - predicate: typeObject isType: "com.adobe.pdf" result: 1
2025-06-12 21:43:32.535 hazelworker[41531][PREDICTION] DEBUG: Next fire time: 4001-01-01 01:00:00.000
2025-06-12 21:43:32.535 hazelworker[41531][PREDICTION] DEBUG: Bail out: OR predicate
2025-06-12 21:43:32.537 hazelworker[41531][PREDICTION] DEBUG: Calculating fire time - predicate: displayBasename hazelMatchesPattern: ({anything:sc0:id0},(,{hazelcustomtoken:PN-12345678:(PN-:{digit:id0}:{digit:id0}:{digit:id0}:{digit:id0}:{digit:id0}:{digit:id0}:{digit:id0}:{digit:id0}):sc0:id0:cap},),{anything:sc0:id0}),{
} result: 0
2025-06-12 21:43:32.537 hazelworker[41531][PREDICTION] DEBUG: Next fire time: 4001-01-01 01:00:00.000
2025-06-12 21:43:32.537 hazelworker[41531][PREDICTION] DEBUG: Calculating fire time - predicate: labelColor !=[cd] 6 result: 1
2025-06-12 21:43:32.537 hazelworker[41531][PREDICTION] DEBUG: Next fire time: 4001-01-01 01:00:00.000
2025-06-12 21:43:32.537 hazelworker[41531][PREDICTION] DEBUG: Predicted fire time for file: /Users/mueller/Downloads/Test/zz.pdf and rule external - 02a_QR-CK8 auslesen, ren Datei mit QR-Inhalt anhängen - sanitized (Sonderzeichen löschen, Leerzeichen gegen "_" ersetzt): 4001-01-01 01:00:00.000 Should poll: 0
2025-06-12 21:43:32.537 hazelworker[41531] zz.pdf: Rule external - 02a_QR-CK8 auslesen, ren Datei mit QR-Inhalt anhängen - sanitized (Sonderzeichen löschen, Leerzeichen gegen "_" ersetzt) matched.
2025-06-12 21:43:32.537 hazelworker[41531] DEBUG: Manual run. Forcing actions to be executed.
2025-06-12 21:43:32.544 hazelworker[41531] DEBUG: == script output ==
Kein QR-Code im Bild gefunden oder der Inhalt entspricht nicht dem erwarteten Format.
== End script output ==
2025-06-12 21:43:32.544 hazelworker[41531] [Error] Shell script failed: Error processing shell script /Users/Shared/DMS-Hazel/Tools-DMS/Scripts/ZBar_qr_CK8stellig_BSD_ren-anhaengen_sanitized.sh on file /Users/mueller/Downloads/Test/zz.pdf.
2025-06-12 21:43:32.544 hazelworker[41531] Shellscript exited with non-successful status code: 1
2025-06-12 21:43:32.544 hazelworker[41531] DEBUG: Tapping error retry sequence
2025-06-12 21:43:32.544 hazelworker[41531] DEBUG: .DS_Store: File is hidden/invisible. Skipping.
2025-06-12 21:43:32.546 hazelworker[41531][PREDICTION] DEBUG: Calculating fire time - predicate: typeObject isType: "com.adobe.pdf" result: 0
2025-06-12 21:43:32.546 hazelworker[41531][PREDICTION] DEBUG: Next fire time: 4001-01-01 01:00:00.000
2025-06-12 21:43:32.546 hazelworker[41531][PREDICTION] DEBUG: Calculating fire time - predicate: typeObject isType: "public.image" result: 0
2025-06-12 21:43:32.546 hazelworker[41531][PREDICTION] DEBUG: Next fire time: 4001-01-01 01:00:00.000
2025-06-12 21:43:32.546 hazelworker[41531][PREDICTION] DEBUG: Bail out: AND predicate
2025-06-12 21:43:32.546 hazelworker[41531][PREDICTION] DEBUG: Predicted fire time for file: /Users/mueller/Downloads/Test/output and rule external - 02a_QR-CK8 auslesen, ren Datei mit QR-Inhalt anhängen - sanitized (Sonderzeichen löschen, Leerzeichen gegen "_" ersetzt): 4001-01-01 01:00:00.000 Should poll: 0
2025-06-12 21:43:32.546 hazelworker[41531] DEBUG: output: Did not match any rules.
2025-06-12 21:43:32.546 hazelworker[41531] DEBUG: Writing out DB file for /Users/mueller/Downloads/Test to path: /Users/mueller/Library/Application Support/Hazel/16777233-263544522.hazeldb
2025-06-12 21:43:32.547 hazelworker[41531] DEBUG: Directory /Users/mueller/Downloads/Test processed in 0.060882 seconds
2025-06-12 21:43:32.547 hazelworker[41531] DEBUG: Sending metrics to scheduler. Next scheduled run: 2025-06-12 21:48:32.544
2025-06-12 21:43:32.547 hazelworker[41531] Done processing folder Test