2015-01-07 16 views
7

regex Immaginiamo che sul mio server, ho i seguenti file:script Bash e questione

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

ho voluto creare un archivio contenente tutti i file, ma logFile *.. Così mi è venuta con il comando:

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

e funziona benissimo! Tuttavia, quando si cerca di creare uno script che fa lo stesso lavoro:

#!/bin/bash 

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

mi sono imbattuto il seguente errore:

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

il problema non è Tar relativi (che ho incontrato lo stesso problema utilizzando ls invece di tar)

Non capisco da dove provenga questo errore. Qualcuno potrebbe dirmi dove sbaglio?

conosciuto su Ubuntu 12.04

risposta

7

Luogo questa linea appena sotto la baracca:

shopt -s extglob 

per abilitare l'opzione glob estesa nello script.

!(logFile.*) è modello glob estesa che richiede l'attivazione extglob

+4

È opportuno sottolineare esplicitamente che l'opzione è attivata per impostazione predefinita in una shell interattiva, che è la causa della differenza di comportamento. –

+1

Dovrò approfondire l'argomento. Grazie a tutti e due ! –