Befehl:
ls /etc/pve/lxc/*([0-9]).conf
Arbeiten in der Konsole:
- Ergebnis: Datei gefunden!
/etc/pve/lxc/107.conf
aber nicht im Drehbuch:
- #!/bin/bash
- Ergebnis: FEHLER
syntax error near unexpected token `('
ls /etc/pve/lxc/*([0-9]).conf
Dann habe ich die Klammern im Skript maskiert:
ls /etc/pve/lxc/*\([0-9]\).conf
- Ergebnis: Keine Datei gefunden
ls: cannot access '/etc/pve/lxc/*([0-9]).conf': No such file or directory
Antwort1
Der Ausdruck *([0-9]).conf
ist ein KSH-Stilerweiterter Glob. Die Funktion ist standardmäßig für interaktive Bash-Shells aktiviert, aber um sie in einem Bash-Skript zu verwenden, muss sie explizit aktiviert werden mit
shopt -s extglob
Siehe auchPlatzhaltererweiterung, die in der Befehlszeile funktioniert, aber nicht in einem Bash-Skript
Antwort2
Die Information, die Sie nicht angeben, ist, welcher Befehlsinterpreter im Skript verwendet wird. Dies wird durch den Shebang angezeigt, also die erste Zeile (z. B. #/bin/sh
).
In Ubuntu führt die Konsole standardmäßig Bash als interaktive Shell aus. Wenn Ihr Skript einen anderen Befehlsinterpreter verwendet, z. B. /bin/sh, funktioniert die für Bash spezifische Syntax nicht.