um comando dentro de uma variável

um comando dentro de uma variável

Quero preencher uma variável com uma linha de comando lida de um arquivo e executá-la. Não há problema quando é um único comando. Quando eu uso um |, não funciona. Qualquer ajuda ??? Obrigado

$ f="ls -1"
$ $f
a
a0
a1
a2
a3
b1
cfg
cfile
dfile
e
fcorreo.txt
log
logs
work
$ f="ls -1 | tail -1"
$ $f
ls: cannot access |: No such file or directory
ls: cannot access tail: No such file or directory
$ f='ls -1 | tail -1'
$ $f
ls: cannot access |: No such file or directory
ls: cannot access tail: No such file or directory
$ echo $f
ls -1 | tail -1

Responder1

O problema é que o pipe ( |) é um comando "meta" executado pelo shell e conecta dois comandos diferentes. O mesmo ls -1 | tail -1acontece com a execução de dois comandos ( lse tail) e usa uma construção de shell ( |) para conectar-se a dois. (então seu títuloacomando dentro de uma variávelestá incorreto, pois seu problema é realmentemúltiplocomandos dentro de umsolteirovariável)

De qualquer forma, a solução é analisar/executar seu comando com o shell:

f="ls -1 | tail -1"
sh -c "${f}"

Alternativamente, você também pode usar eval, que funciona sem bifurcar um novo processo de shell:

f="ls -1 | tail -1"
eval "${f}"

Responder2

você pode usar uma função como abaixo;

f() { ls -1 | tail -1; } 

Por exemplo;

user@host $ f() { ls -1 | tail -1; }
user@host $ f
test.txt

informação relacionada