un comando dentro de una variable

un comando dentro de una variable

Quiero llenar una variable con una línea de comando leída de un archivo y ejecutarla. No hay problema cuando se trata de un solo comando. Cuando uso un |, no funciona. Alguna ayuda ??? Gracias

$ 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

Respuesta1

El problema es que la tubería ( |) es un comando "meta" ejecutado por el shell y conecta dos comandos diferentes. También lo ls -1 | tail -1es ejecutar dos comandos ( lsy tail) y utilizar una construcción de shell ( |) para conectarse a dos. (Entonces tu títuloacomando dentro de una variablees incorrecto, ya que su problema es realmentemúltiplecomandos dentro de unsolterovariable)

De todos modos, la solución es analizar/ejecutar su comando con el shell:

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

Alternativamente, también puedes usar eval, que funciona sin bifurcar un nuevo proceso de shell:

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

Respuesta2

puede utilizar una función como se muestra a continuación;

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

P.ej;

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

información relacionada