cp não funcionará no diretório atual do script bash

2

Estou tentando copiar alguns arquivos do diretório atual em um script bash, mas o problema é que o comando cp não funciona com o diretório atual. Eu posso usar o seguinte comando sem qualquer problema no Backtrack 5 (baseado no Ubuntu) mas não no Kali linux (baseado no Debian):

cp -f -v *.{html,txt,php} /var/www/

Eu posso executar este comando diretamente do terminal mudando primeiro o diretório para o diretório onde esses arquivos estão. Mas usando script eu recebo o seguinte erro:

cp -f -v *.{html,txt,php} /var/www/
cp: cannot stat '*.{html,txt,php}': No such file or directory

Novamente, não tenho problemas com este comando no script quando uso o Ubuntu.

    
por bablod 16.04.2015 / 16:09

2 respostas

3

Seu interpretador de scripts está definido como /bin/sh . No sistema que expande a lista de braces, você está usando o shell Bourne Again como /bin/sh . No sistema que trata as chaves como caracteres comuns (não-meta), e reclama que o curinga não corresponde a nada, você está usando o shell do Debian Almquist como /bin/sh . Seu shell de login interativo é quase certamente explicitamente /bin/bash em ambos os sistemas.

Se você pretende usar essas extensões para a linguagem de shell POSIX em um script, você deve configurar o interpretador de script como o nome real de um shell que as suporta. Por outro lado, se você for usar /bin/sh como um interpretador de scripts em diversos sistemas, você deve permanecer estritamente na sintaxe do shell que esteja em conformidade com POSIX.

Leitura adicional

por 16.04.2015 / 17:33
1

A mensagem de erro cannot stat '*.{html,txt,php}' de cp indica que:

  • Nenhum arquivo correspondente existe ou
  • Você está usando um shell que não suporta a expansão.

Qual shell você está usando no sistema em que o comando falha? Se não for bash mas sim sh ou dash, então isso pode explicar o que você está vendo. Você poderia tentar dar seu comando *.html *.txt *.php em vez do padrão de chave.

    
por 16.04.2015 / 16:22