Como armazenar pipe (|) em uma variável?

10

A idéia seria usá-lo como ... um pipe em um comando. Por exemplo: digamos que há algum tipo de caminho longo que tem que ser repetido várias vezes, seguido por um pipe e um segundo programa, ou seja,

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

Eu gostaria que essa parte fosse armazenada em uma variável, então ela poderia ser usada assim:

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

Em vez disso, obtenho

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

... significando que o tubo claramente não funcionou.

    
por laur 19.09.2013 / 13:04

2 respostas

19

bash não reinterpreta completamente a linha de comando depois de expandir as variáveis. Para forçar isso, coloque eval na frente:

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

No entanto, existem maneiras mais elegantes de fazer isso (aliases, funções, etc.).

    
por 19.09.2013 / 13:12
7

Você está tentando misturar código e dados, o que não é uma boa ideia. Em vez disso, defina uma função que tenha um nome de arquivo (diretório?) Como argumento e exiba-o com less .

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

view directory1/directory2/directory3 <searchterm>
    
por 19.09.2013 / 21:18