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 cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.