ls com curingas e colchetes funcionando no console, mas não em um script

ls com curingas e colchetes funcionando no console, mas não em um script

Comando:

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

Trabalhando no console:

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

mas não no roteiro:

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

Então mascarei os colchetes no script:

ls /etc/pve/lxc/*\([0-9]\).conf
  • Resultado: Nenhum arquivo encontrado
ls: cannot access '/etc/pve/lxc/*([0-9]).conf': No such file or directory

Responder1

A expressão *([0-9]).confé do estilo KSHglobo estendido. O recurso é habilitado por padrão para shells bash interativos, mas para usá-lo em um script bash ele deve ser habilitado explicitamente usando

shopt -s extglob

Veja tambémExpansão curinga que funciona na linha de comando, mas não em um script bash

Responder2

A informação que você não fornece é qual interpretador de comando é usado no script. Isto é indicado pelo shebang, ou seja, a primeira linha (por exemplo. #/bin/sh).

No Ubuntu, o console por padrão executa o bash como shell interativo. Se o seu script usar outro interpretador de comandos, por exemplo, /bin/sh, a sintaxe específica do bash não funcionará.

informação relacionada