Làm thế nào để lưu trữ đường ống (|) trong một biến?


12

Ý tưởng sẽ là sử dụng nó như ... một đường ống trong một lệnh. Ví dụ: giả sử có một loại đường dài phải được thử lại nhiều lần, theo sau là một đường ống và chương trình thứ hai, nghĩa là

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

Tôi muốn phần đó được lưu trữ trong một biến, vì vậy nó có thể được sử dụng như thế này:

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

Thay vào đó, tôi nhận được

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

... có nghĩa là đường ống rõ ràng không hoạt động.


1
Trong khi bạn có thể eval, thường thì bạn thực hiện một chức năng.
frostschutz

Câu trả lời:


21

bash không hoàn toàn diễn giải lại dòng lệnh sau khi mở rộng các biến. Để buộc điều này, đặt evalở phía trước:

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

Tuy nhiên, có nhiều cách thanh lịch hơn để làm điều này (bí danh, chức năng, v.v.).


8

Bạn đang cố gắng trộn mã và dữ liệu, đó không phải là một ý tưởng tốt. Thay vào đó, hãy xác định một hàm lấy tên tệp (thư mục?) Làm đối số và hiển thị nó với less.

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

view directory1/directory2/directory3 <searchterm>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.