Bagaimana cara menyimpan pipa (|) dalam suatu variabel?

12

Idenya adalah menggunakannya sebagai ... sebuah pipa dalam sebuah perintah. Sebagai contoh: katakanlah ada semacam jalan panjang yang harus diketik ulang lagi dan lagi, diikuti oleh pipa dan program kedua, yaitu

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

Saya ingin bagian itu disimpan dalam variabel, sehingga bisa digunakan seperti ini:

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

Sebaliknya, saya mengerti

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

... berarti pipa itu jelas tidak berfungsi.

laur
sumber
1
Sementara Anda bisa eval, biasanya Anda membuat suatu fungsi.
frostschutz

Jawaban:

21

bash tidak sepenuhnya menginterpretasikan ulang baris perintah setelah memperluas variabel. Untuk memaksakan ini, letakkan evaldi depan:

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

Namun demikian, ada cara yang lebih elegan untuk melakukan ini (alias, fungsi, dll.).

Jofel
sumber
8

Anda mencoba menggabungkan kode dan data, yang bukan ide yang baik. Alih-alih, tentukan fungsi yang menggunakan nama file (direktori?) Sebagai argumen, dan menampilkannya less.

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

view directory1/directory2/directory3 <searchterm>
chepner
sumber