Por que 2 máquinas Linux se comportam de maneira diferente com comandos da mesma sintaxe?

Por que 2 máquinas Linux se comportam de maneira diferente com comandos da mesma sintaxe?

Estou usando 2 máquinas, que são ambasRed Hat Enterprise Linux AS versão 3 (Atualização Taroon 2) (Eu verifico em /etc/*-release ).

Verifiquei que eles estão usando o mesmo shell padrão ps -p $$, que é bash.

Tentei executar um comando find com padrão curinga: find path -name pattern -type f -ctime +3

e o padrão contém o caractere * como curinga.

A primeira máquina parece expandir o caractere curinga e causar erro:

find /home/primbat/testing -name sftp_bcs_report_*.log -type f -ctime +7
find: paths must precede expression

e preciso fazer o padrão entre 2 qoute delimitados, por exemplo: \"sftp_bcs_report_*.log\"ou usar set -fno script para suprimir a expansão de curinga.

Que na outra máquina não tem esse problema. Você tem alguma ideia?

Responder1

Por padrão, os shells expandem os curingas se um arquivo corresponder a eles, mas permanecem não expandidos sem correspondência. Por exemplo, se você executar touch /tmp/111; touch /tmp/11*isso criará e atualizará o mtime em /tmp/111, mas se /tmp estiver vazio, mas você chamar, touch /tmp/11*você obterá um arquivo chamado "11*" em /tmp.

Esta é uma característica bastante estranha dos shells. Às vezes, a expansão adequada não é possível sem hacks especiais como função intermediária. A maioria dos shells atuais inventa opções especiais para casos típicos; por exemplo, "shopt -s failglob" no bash rejeita a execução de qualquer comando onde a correspondência de curinga falha.

Deve-se confiar na expansão do curinga do find, portanto, tal padrão deve ser citado em relação à expansão no shell:

find /home/primbat/testing -name 'sftp_bcs_report_*.log' -type f -ctime +7

(observe aspas simples). Com zero ou um arquivo funciona, mas com dois ou mais arquivos você obtém uma sintaxe de comando quebrada e ele reclama - é o que diz o colegaArcegé. Seu "set -f" desativa totalmente a expansão - bem, é uma boa medida para diagnóstico, mas pode fornecer ancinhos subaquáticos para uma movimentação futura. As citações são mais simples :)

Responder2

Parece que não há nenhum arquivo correspondente sftp_bcs_report_*.logno diretório inicial da segunda máquina e mais de um arquivo no primeiro servidor. Para usar find, os padrões devem sempre ser citados.

informação relacionada