Come conservare pipe (|) in una variabile?


12

L'idea sarebbe di usarlo come ... una pipe in un comando. Ad esempio: supponiamo che ci sia una sorta di lungo percorso che deve essere ripetuto di nuovo e ripetutamente, seguito da una pipe e un secondo programma, ovvero

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

Vorrei che quella parte fosse archiviata in una variabile, quindi poteva essere usata in questo modo:

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

Invece, capisco

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

... il che significa chiaramente che la pipa non ha funzionato.


1
Sebbene tu potessi eval, di solito fai una funzione.
frostschutz,

Risposte:


21

bash non reinterpreta completamente la riga di comando dopo l'espansione delle variabili. Per forzare questo, metti evaldi fronte:

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

Tuttavia, ci sono modi più eleganti per farlo (alias, funzioni ecc.).


8

Stai cercando di mescolare codice e dati, il che non è una buona idea. Definire invece una funzione che accetta un nome di file (directory?) Come argomento e lo visualizza con less.

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

view directory1/directory2/directory3 <searchterm>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.