Executando o script no ambiente cygwin

0

Estou usando este código:

  numbzip='ls *.plt.zip | wc -l' &>/dev/null

e tentando se livrar da saída na janela de comando.

Não existem arquivos terminados em .plt.zip, então ele retorna:

ls: cannot access *.plt.zip: No such file or directory

qualquer tentativa eu sempre escrevo esta linha na janela de comando.

Eu tentei:

numbzip='ls *.plt.zip | wc -l' >/dev/null 2>/dev/null
numbzip='ls *.plt.zip | wc -l' >/dev/null >>/dev/null 2>/dev/null

Atenciosamente, Wilco.

    
por Wilco 20.01.2016 / 15:55

2 respostas

0

Você não deve analisar a saída de ls . Em vez disso, use find

numbzip=$(find -iname "*.zip" | wc -l)

echo $numzip
    
por 20.01.2016 / 16:03
0

Você continua vendo a mensagem porque está redirecionando a coisa errada:

numbzip='ls *.plt.zip | wc -l' &>/dev/null

Isso redireciona o stderr da atribuição de variável, não do comando ls . Você está executando o ls dentro do '' e redirecionando para fora dele. Para redirecionar a saída de erro de ls , use:

numbzip='ls *.plt.zip 2>/dev/null | wc -l' 

Dito isto, enquanto o acima irá funcionar para nomes de arquivo simples, ele falhará se seus nomes de arquivo contiverem novas linhas. Como regra geral, você deve evitar analisar a saída de ls . Você pode usar o shell globbing em vez disso:

zipfiles=( *.plt.zip )
echo ${#zipfiles[@]}

O primeiro comando criará a matriz zipfiles cujo conteúdo é todo o arquivo / diretório correspondente ao glob *.plt.zip . A segunda linha imprime o número de elementos na matriz.

    
por 20.01.2016 / 17:51

Tags