Tôi gặp phải vấn đề thú vị này trong khi điền vào thanh WM của mình bằng văn bản thông tin, được áp dụng bằng cách đặt tiêu đề của cửa sổ gốc, tức là xsetroot -name "clever words"
Cuối cùng, in một tài sản hoạt động tốt trong một thiết bị đầu cuối:
fortune -s | while read -r; do xsetroot -name "$REPLY"; done
Tuy nhiên, điều đó cũng thất bại khi chạy từ tập lệnh shell:
#!/bin/sh
cat /tmp/afile | while read; do echo "$REPLY"; done
Sản xuất:
$ sh afilerhead
afilerhead: 2: read: arg Count
Tất nhiên điều này được khắc phục bằng cách gán kết quả tài sản của chúng tôi cho một biến, sau đó sử dụng xsetroot với biến đã nói. Nhưng tôi vẫn muốn hiểu tại sao điều này không hoạt động trong một kịch bản.
Tôi nhận ra mỗi lệnh ở hai bên của đường ống được chạy trong lớp con riêng của nó, nhưng không thấy các biến cục bộ của chúng có thể ảnh hưởng đến vòng lặp đọc như thế nào. Hoặc là các biến ngoài phạm vi ngay cả giữa các vòng lặp lặp?
Tôi đang thiếu gì?
Cập nhật: Các sh
tôi đã sử dụng được liên kết với dấu gạch ngang, đó là trong quá trình đang được thực hiện POSIX tuân thủ. Sử dụng đáng kính hơn đã bash
giải quyết điều này.
read
khả xâm phạm mà không có biến: pubs.opengroup.org/onlinepub/9699919799/utilities/read.html