Як зберігати трубу (|) у змінній?


12

Ідея полягала б у тому, щоб використовувати його як ... трубу в команді. Наприклад: скажіть, що існує якийсь довгий шлях, який потрібно повторювати знову і знову, після чого йде труба та друга програма, тобто

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

Я хотів би, щоб ця частина зберігалася в змінній, щоб її можна було використовувати так:

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

Натомість я отримую

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

... значить, труба явно не працювала.


1
Хоча ви могли eval, зазвичай ви робите функцію.
frostschutz

Відповіді:


21

bash не повністю інтерпретує командний рядок після розширення змінних. Щоб вимусити це, поставте evalпопереду:

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

Тим не менш, є більш елегантні способи зробити це (псевдоніми, функції тощо).


8

Ви намагаєтеся змішати код і дані, що не є хорошою ідеєю. Замість цього визначте функцію, яка приймає ім'я файлу (каталогу?) Як аргумент та відображає його less.

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

view directory1/directory2/directory3 <searchterm>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.