¿Cómo almacenar tubería (|) en una variable?


12

La idea sería usarlo como ... una tubería en un comando. Por ejemplo: digamos que hay algún tipo de camino largo que debe ser reescrito una y otra vez, seguido de una tubería y un segundo programa, es decir

"directory1/directory2/direcotry3/file.dat | less -I "

Me gustaría que esa parte se almacene en una variable, por lo que podría usarse así:

r="directory1/directory2/direcotry3 \| less -I -p "
$ cat path1/path2/$r <searchterm>

En cambio, me sale

cat: invalid option -- I
Try `cat --help' for more information.

... lo que significa que la tubería claramente no funcionó.


1
Mientras puedas eval, generalmente haces una función.
frostschutz

Respuestas:


21

bash no reinterpreta completamente la línea de comando después de expandir las variables. Para forzar esto, pon evaldelante:

r="directory1/directory2/direcotry3/file.dat | less -I "
eval "cat path1/path2/$r"

Sin embargo, hay formas más elegantes de hacerlo (alias, funciones, etc.).


8

Estás intentando mezclar código y datos, lo cual no es una buena idea. En su lugar, defina una función que tome un nombre de archivo (directorio?) Como argumento y lo muestre con less.

view () {
    less -I -p "$2" $1
}

view directory1/directory2/directory3 <searchterm>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.