Comment stocker le tuyau (|) dans une variable?


12

L'idée serait de l'utiliser comme ... un tuyau dans une commande. Par exemple: disons qu'il y a une sorte de long chemin qui doit être retapé encore et encore, suivi d'un tube et d'un deuxième programme

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

J'aimerais que cette partie soit stockée dans une variable, donc elle pourrait être utilisée comme ceci:

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

Au lieu de cela, je reçois

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

... ce qui signifie que la pipe n'a clairement pas fonctionné.


1
Bien que vous le puissiez eval, vous créez généralement une fonction.
frostschutz

Réponses:


21

bash ne réinterprète pas complètement la ligne de commande après avoir développé les variables. Pour forcer cela, mettez evalen avant:

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

Néanmoins, il existe des moyens plus élégants de le faire (alias, fonctions, etc.).


8

Vous essayez de mélanger du code et des données, ce qui n'est pas une bonne idée. Au lieu de cela, définissez une fonction qui prend un nom de fichier (répertoire?) Comme argument et l'affiche avec less.

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

view directory1/directory2/directory3 <searchterm>
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.