cat comando não está funcionando dentro do shell script

1

Eu tenho a seguinte linha que não está funcionando no ksh, mas funciona bem em sh:

cat 'find /home/peter/databases -name "cells.txt"'

Isto está funcionando se esta linha estiver dentro do script / usr / bin / sh. Mas não quando está dentro de / usr / bin / ksh.

Qualquer dica porque isso é assim?

Estou usando:

SUSE Linux Enterprise Server 11 (x86_64)
VERSION = 11
PATCHLEVEL = 4

"Não está funcionando" significa que o script trava (algo como o comportamento se cat não é fornecido com o nome do arquivo como parâmetro)

A saída de find /home/peter/databases -name "cells.txt" NÃO está vazia no script ksh. Nesse caso, o script pode listar os arquivos encontrados. Mas o problema surge se eu tentar catar os arquivos encontrados usando citações anteriores, como mencionado acima.

Existem quase 1000 arquivos listados com o comando find, mas a maioria deles está vazia. O comando cat acima está funcionando sh, mas não em ksh.

  • Não há arquivos com espaços de nomes, incluindo neles.
  • O conteúdo do arquivo cells.txt é uma instrução vazia ou única.
  • O comando (cat 'localizar / home / peter / databases -name "cells.txt"') funciona bem se o número de arquivos em / home / peter / databases for menor. Neste caso, o número de arquivos é de 1.000.
  • O mesmo comando está funcionando no SUSE 11.3 ksh. Mas falha se eu o executar no SUSE 11.4.
  • Eu mantive apenas alguns arquivos com o nome cells.txt nos diretórios em / home / peter / databases, o comando está funcionando perfeitamente bem. Quando os arquivos com o nome cells.txt crescem para um número de aproximadamente 1000, o comando não fornece nenhuma saída (trava). Eu suspeito que é por causa de algum buffer usado para a cotação de saída de volta? ('') Porque o SUSE 11.3 não tem nenhum problema, mas 11.4 trava.
  • O comando funcionou com a opção -size +0 junto com o find. Está indicando novamente algo sobre buffer?
por SS Hegde 16.12.2015 / 12:01

2 respostas

0

O script funcionou ignorando os tamanhos de arquivo de zero no comando find. (-size +0)

 cat 'find /home/peter/databases -name "cells.txt" -size +0'

Concordo com a outra solução também. Mas desde que minha pergunta foi para encontrar a razão pela qual o ksh é incapaz de processar o gato foi por causa do tamanho do buffer (saída de citação de volta), eu estou postando minha resposta. @wurtel: Obrigado. sua sugestão resolveu o problema.

    
por 17.12.2015 / 12:10
4

Tente isso como uma solução alternativa, que invocará cat somente quando encontrar um arquivo

find /home/peter/databases -type f -name 'cells.txt' -exec cat {} +

(Se a sua versão de find não entender o + à direita, substitua-o pelos dois caracteres \; )

    
por 16.12.2015 / 12:52