Eu tenho um script Perl que me fornece uma lista definida de números aleatórios que correspondem às linhas de um arquivo. Em seguida, quero extrair essas linhas do arquivo usando sed
.
#!/bin/bash
count=$(cat last_queries.txt | wc -l)
var=$(perl test.pl test2 $count)
A variável var
retorna uma saída como: cat last_queries.txt | sed -n '12p;500p;700p'
. O problema é que não consigo executar este último comando. Eu tentei com $var
, mas a saída não está correta (se eu executar manualmente o comando ele funciona bem, então não há problema). Qual é a maneira correta de fazer isso?
PS: Claro que eu poderia fazer todo o trabalho em Perl, mas estou tentando aprender dessa maneira, porque isso poderia me ajudar em outras situações.
$($cmd))
falhou. Ele sempre diz que o comando não foi encontrado. Obrigado!apenas com o seu arquivo.
Neste exemplo, usei o arquivo / etc / password, usando a variável especial
${RANDOM}
(sobre a qual aprendi aqui) e ased
expressão que você teve, a única diferença é que estou usando aspas duplas em vez de simples para permitir a expansão da variável.fonte
No caso em que você tem múltiplas variáveis contendo os argumentos para um comando que você está executando, e não apenas uma única corda, você deve não usar eval diretamente, como ele irá falhar no seguinte caso:
Resultado:
Observe que, embora "Algum argumento" tenha sido passado como um único argumento,
eval
leia-o como dois.Em vez disso, você pode simplesmente usar a string como o próprio comando:
Observe a diferença entre a saída
eval
e a novaeval_command
função:Resultado:
fonte
eval 'echo_arguments arg1 arg2 "Some arg"'
. Então a saída será como no seu segundo exemplo.