Usando a saída de um comando para determinar o nome do arquivo para redirecionar a saída para

2

Eu quero executar smartctl -a e usar o número de série do dispositivo dessa saída como o nome do arquivo para armazenar a saída. Eu sei que isso pode ser feito invocando smartctl duas vezes e fatiando a saída com manipulação de texto adequada. Existe uma maneira de fazer isso com apenas uma única invocação de smartctl ?

    
por Mark 22.11.2014 / 23:27

2 respostas

2

Armazene a saída de smartctl em uma variável e use-a quantas vezes quiser.

smartctl_output=$(smartctl -a /dev/sda)
serial_number=$(printf %s "$smartctl_output" | awk 'sub(/^Serial Number: */,"")')
printf %s "$smartctl_output" >"$serial_number.txt"
    
por 23.11.2014 / 22:04
0

Você poderia apenas armazenar a saída de smartctl -a em um arquivo temporário e fazer a dupla análise sobre isso. Isso torna o teste rápido do seu script (gere o arquivo temporário uma vez, comente a chamada para smartctl , ajuste seu analisador até que eles sejam satisfatórios e, em seguida, remova o comentário da linha smartctl .

Como alternativa, você pode usar pee para enviar a saída de smartctl -a em dois programas, mas ainda assim será necessário um arquivo temporário de um dos processos, que pode ser renomeado com o número de série encontrado pelo outro. / p>     

por 22.11.2014 / 23:50