Puedo ejecutar este comando desde mi línea de comando:
cp -r folder/!(exclude-me) ./
Copiar recursivamente todos los contenidos, folder
excepto el subdirectorio nombrado exclude-me
en el directorio actual. Esto funciona exactamente como se pretendía. Sin embargo, necesito que esto funcione en un script bash que he escrito, donde tengo esto:
if [ -d "folder" ]; then
cp -r folder/!(exclude-me) ./
rm -rf folder
fi
Pero cuando ejecuto el script:
bash my-script.sh
Entiendo esto:
my-script.sh: line 30: syntax error near unexpected token `('
my-script.sh: line 30: ` cp -r folder/!(exclude-me) ./'
Y no sé por qué funciona desde el símbolo del sistema, pero exactamente la misma línea no funciona en un script bash.
bash
shell-script
nzifnab
fuente
fuente
env > file1
en el script y ejecutar./it
, y luegoenv > file2
ysource it
, con la esperanza de que hubiera encontrado una diferencia en elenv
s, que no es el caso. ¿Cómo puedo enumerar programáticamente todas las diferencias entre dos shells (en este caso, interactivas versus no interactivas)?Agregue esta línea cerca de la parte superior de su script:
!(...)
es una característica extendida de coincidencia de patrones, necesita laextglob
opción habilitar para usarla. Ver shopt incorporado para más detalles.fuente