Ich kann diesen Befehl über meine Eingabeaufforderung ausführen:
cp -r folder/!(exclude-me) ./
Um alle Inhalte mit folder
Ausnahme des genannten Unterverzeichnisses rekursiv exclude-me
in das aktuelle Verzeichnis zu kopieren . Dies funktioniert genau wie vorgesehen. Ich brauche dies jedoch, um in einem von mir geschriebenen Bash-Skript zu arbeiten, in dem ich Folgendes habe:
if [ -d "folder" ]; then
cp -r folder/!(exclude-me) ./
rm -rf folder
fi
Aber wenn ich das Skript starte:
bash my-script.sh
Ich verstehe das:
my-script.sh: line 30: syntax error near unexpected token `('
my-script.sh: line 30: ` cp -r folder/!(exclude-me) ./'
Und ich weiß nicht, warum es an der Eingabeaufforderung funktioniert, aber genau dieselbe Zeile funktioniert in einem Bash-Skript nicht.
quelle
env > file1
in das Skript zu setzen und auszuführen./it
, und dannenv > file2
undsource it
in der Hoffnung, dass ich einen Unterschied imenv
s gefunden hätte, was nicht der Fall ist. Wie kann ich programmgesteuert den Unterschied zwischen zwei Shells auflisten (in diesem Fall interaktiv und nicht interaktiv)?Fügen Sie diese Zeile oben in Ihrem Skript hinzu:
!(...)
ist eine erweiterte Mustervergleichsfunktion,extglob
für deren Verwendung Sie die Option aktivieren müssen. Weitere Informationen finden Sie unter Shopt Builtin .quelle