Não é possível atribuir saída de comando a uma variável

0

Estou tentando atribuir o nome de arquivo mais recente obtido do comando abaixo ls, mas recebendo algum erro, seria muito bom se alguém pudesse responder como posso corrigir isso!

fn='ls -lrt pur_bom_interface_daily*.log | cut -c59-102 | tail -1'

ou

fn=$(ls -lrt pur_bom_interface_daily*.log | cut -c59-102 | tail -1)

Erro:

ls: 0653-341 The file pur_bom_interface_daily*.log does not exist

Nota: pur_bom_interface_daily*.log Estou usando * , pois há vários arquivos iniciando seu nome com pur_bom_interface_daily e concatenados com a data em que foram criados.

    
por Harish Maralihalli 25.08.2014 / 14:51

2 respostas

1

Sua segunda linha de script deve funcionar, a menos que os arquivos pur_bom_interface_daily * .log não existam em seu diretório de trabalho atual. Para provar isso, tente este bloco de código de exemplo:

mkdir logfiles
cd logfiles
touch log-{1..4}.log
fn=$(ls -lrt log-*.log)
echo "$fn"

Os resultados do último comando devem listar os 4 novos arquivos de log que você fez usando touch .

O bloco de código de exemplo também deve funcionar se você substituir a quarta linha por:

fn=$(ls -lrt log-*.log | cut -c1-59 | tail -4)

... embora você possa ter que alterar o 59 para um número diferente para que a saída de cada linha tenha um comprimento significativo (59 é o comprimento de cada linha de saída na linha de código acima ).

    
por karel 25.08.2014 / 15:45
0

O uso de backticks atribuirá todos os stdout à sua variável com espaços entre cada argumento, espaços em nomes de arquivos estragar tudo. Para obter o primeiro ou o último canal na cabeça ou na cauda, tente:

fn='ls -rt -1 * | tail -1'

A opção -1 on ls é um arquivo por linha. A opção -1 on tail é apenas a última linha.

    
por rhubarbdog 25.08.2014 / 15:41