2015-01-07 13 views
7

Stellen wir uns vor, dass auf meinem Server, ich habe die folgenden Dateien:Bash-Skript und regex Ausgabe

[email protected]:/var/log/foo$ ls 
fooFile1 fooFile2 logFile logFile.1 logFile.2 

Ich wollte ein Archiv, das jede Datei aber logFile erstellen *.. So kam ich mit dem Befehl auf:

[email protected]:~$ tar -czf foo.tar.gz /var/log/foo/!(logFile.*)

Und es funktioniert gut! Wenn jedoch versucht, ein Skript zu erstellen, die die gleiche Aufgabe:

#!/bin/bash 

tar -czf foo.tar.gz /var/log/foo/!(logFile.*) 

ich über den folgenden Fehler kam:

./test.sh: line 3: syntax error near unexpected token '(' 
./test.sh: line 3: 'tar -czf foo.tar.gz /var/log/foo/!(logFile.*)' 

Das Problem ist nicht verwandt ist tar (ich das gleiche Problem traf mit ls statt von tar)

Ich verstehe nicht, wo dieser Fehler herkommt. Kann mir jemand sagen, wo ich falsch liege?

Met auf Ubuntu 12.04

Antwort

7

Platz diese Zeile direkt unter shebang:

shopt -s extglob 

erweiterte glob Option in Ihrem Skript zu aktivieren.

!(logFile.*) ist erweiterte glob Muster, das extglob

+4

Es lohnt erfordert ermöglicht ist Hinweis darauf ausdrücklich, dass diese Option standardmäßig in einer interaktiven Shell aktiviert ist, was die Ursache für das unterschiedliche Verhalten ist. –

+1

Ich muss mehr darüber schauen. Danke euch beiden ! –