Variável mostra em branco, mesmo que seja colocado entre aspas duplas

0

Eu tenho uma pergunta simples com você que não posso responder a mim mesmo. Eu tenho uma variável abaixo, que mostra um espaço em branco após a impressão do resultado.

SCRIPT:

core_out=find coretst.*
echo "$core_out"
Result: No display *blank*
#tried to echo without double quotes as well but it has the same result

btw, estou usando putty sobre isso.

Objetivo atual: 1. Verifique core. * Em /opt/datintdv/Informatica/9.6.1/server/bin --dir1 - Se o núcleo. * Existir e mais de 1, obtenha 1 núcleo. * então execute strings (core. *) | grep “pmdtm (“ --script1 então armazene a saída em um parâmetro se script1 não funcionou execute o arquivo (nome do arquivo do núcleo) até que todo o núcleo. tenha sido executado em seguida, armazene a saída em uma variável. - Se core. * Não existe no dir1 em seguida, marque /opt/datintdv/Informatica/9.6.1/tomcat/bin Se o núcleo. * Existir e mais de 1, obtenha 1 núcleo. * então execute strings (core. *) | grep “pmdtm (“ --script1 então armazene a saída em um parâmetro se script1 não funcionou execute o arquivo (nome do arquivo do núcleo) até que todo o núcleo. tenha sido executado em seguida, armazene a saída em uma variável. * saída é separada por uma nova linha

  1. Obtenha toda a saída e concatene-a como o corpo do e-mail.
  2. Envie para o usuário via e-mail. * No momento, estou escrevendo um roteiro para isso, mas estou tendo dificuldades, já que é a primeira vez que faço isso.

Espero que você possa me ajudar! Obrigado!

    
por Geronimo 05.03.2018 / 15:35

1 resposta

2

A substituição de comandos, que significa usar o resultado de um comando para algo in-line, é feita com $( ... ) .

No seu caso,

core_out=$( find coretst.* )

No entanto, isso solicitará que find procure em todos os caminhos que iniciam com qualquer coisa para a qual coretst.* se expande. O que eu suponho que você quer fazer é procurar no diretório atual ou abaixo por arquivos que corresponda ao padrão coretst.* . Você faria isso com

core_out=$( find . -type f -name 'coretst.*' )

A citação do padrão coretst.* impede que o shell seja expandido para nomes no diretório atual.

Então, é uma questão o que você gostaria de fazer com os nomes de caminho retornados por isso. Se você quiser apenas imprimi-los, não há necessidade da variável:

find . -type f -name 'coretst.*'

Se você quiser remover esses arquivos, faça isso em find :

find . -type f -name 'coretst.*' -exec rm {} +

Qualquer outra operação nos arquivos também pode ser executada em find .

Veja a pergunta " Por que o loop está causando a saída incorreta Pratique? "por razões pelas quais usar os caminhos que find retorna pode ser um mau hábito (as respostas são sobre o resultado de find , que é o que eu presumo que você queira fazer mais tarde) .

Dos comentários:

I want to search it in a current folder, and the output on this will be used on a substring and consequently will be used on this: strings ($core_out) | grep "pmdtm("

Se eu entendi isso corretamente, isso pode ser feito com

find . -type f -name 'coretst.*' -exec strings {} + | grep -F 'pmdtm('

Ou seja, execute strings em todos os arquivos encontrados e localize as linhas que contêm a string pmdtm( .

Se você quiser saber em qual arquivo a correspondência foi encontrada:

find . -type f -name 'coretst.*' -exec sh -c '
    for name; do
        if strings "$name" | grep -qF "pmdtm("; then
            printf "%s\n" "$name"
        fi
    done' find-sh {} +
    
por 05.03.2018 / 15:50

Tags