ls con comodines y corchetes funciona en la consola pero no en un script

ls con comodines y corchetes funciona en la consola pero no en un script

Dominio:

ls /etc/pve/lxc/*([0-9]).conf

Trabajando en consola:

  • Resultado: archivo encontrado!
/etc/pve/lxc/107.conf

pero no en guión:

  • #!/bin/bash
  • Resultado: ERROR
syntax error near unexpected token `('
ls /etc/pve/lxc/*([0-9]).conf

Luego enmascaré los corchetes en el guión.:

ls /etc/pve/lxc/*\([0-9]\).conf
  • Resultado: No se encontró ningún archivo
ls: cannot access '/etc/pve/lxc/*([0-9]).conf': No such file or directory

Respuesta1

La expresión *([0-9]).confes del estilo KSH.globo extendido. La característica está habilitada de forma predeterminada para shells bash interactivos, pero para usarla en un script bash se debe habilitar explícitamente usando

shopt -s extglob

Ver tambiénExpansión comodín que funciona en la línea de comando pero no en un script bash

Respuesta2

La información que no proporciona es qué intérprete de comandos se utiliza en el script. Esto se indica mediante el shebang, es decir, la primera línea (por ejemplo #/bin/sh).

En Ubuntu, la consola ejecuta bash de forma predeterminada como shell interactivo. Si su script usa otro intérprete de comandos, por ejemplo /bin/sh, la sintaxis específica de bash no funcionará.

información relacionada