Tôi có một số công việc dơ bẩn, do đó, một tập lệnh Bash có vẻ là một lựa chọn tốt. Tôi là người mới đối với Bash, và kinh nghiệm khiến tôi cảm thấy thất vọng.Bash: đọc một tệp theo từng dòng và xử lý từng phân đoạn dưới dạng tham số cho các prog khác
Tệp mapfiles.txt bao gồm các dòng như sau. Mỗi dòng có bốn phân đoạn được phân tách bằng khoảng trắng. Mỗi phân đoạn đại diện cho một tham số đầu vào cho một tên chương trình bên ngoài 'prog'. Ví dụ, "cm19_1.png" là filename, "0001" của index, "121.422.481" các longitude, và "31.035.995" các vĩ.
File: mapfiles.txt
cm19_1.png 0001 121422481 31035995
cm19_2.png 0002 121423224 31035995
cm19_3.png 0003 121423967 31035995
…
Tôi muốn thực hiện các lệnh tương tự với từng ngành nghề. Như hình dưới đây, thứ tự tham số đầu vào của prog là hơi khác nhau. Vì vậy, nó có ý nghĩa để viết một kịch bản bash để xử lý công việc lặp đi lặp lại.
[Usage] prog <index> <longitude> <latitude> <filename>
example: prog 0001 121422481 31035995 cm19_1.png
Nói chung, các tập lệnh bash sẽ hoạt động theo cách này:
- đọc một dòng từ mapfiles.txt
- chia các phân đoạn
- Gọi prog với một trật tự thông số đúng
Đây là run.sh.
#!/bin/sh
input=mapfiles.txt
cmd=prog
while read line
do
file=$(echo $line | cut -d' ' -f1)
key=$(echo $line | cut -d' ' -f2)
log=$(echo $line | cut -d' ' -f3)
lat=$(echo $line | cut -d' ' -f4)
echo $cmd $key $log $lat $file
done < "$input"
gì tôi mong đợi là
prog 0001 121422481 31035995 cm19_1.png
prog 0002 121423224 31035995 cm19_2.png
prog 0003 121423967 31035995 cm19_3.png
…
Kết quả THỰC TẾ tôi nhận được
cm19_1.png21422481 31035995
cm19_2.png21423224 31035995
cm19_3.png21423967 31035995
vấn đề mà nhầm lẫn tôi
- ở đâu 'prog'?
- Đâu là khoảng trắng?
- Có gì sai với thứ tự tham số?
Hmm… Tôi đã viết kịch bản này trên máy Mac bằng cách sử dụng vim và sao chép nó vào hộp Khoa học Linux và hộp gentoo. Ba chàng trai này có được kết quả tương tự vô lý.
Không tái sản xuất ở đây. Tìm lỗi chính tả. Ngoài ra, thay vì tất cả các vết cắt chỉ sử dụng 'đọc tệp nhật ký khóa lat'. * UPD * xem câu trả lời. –
Khi kết hợp với ssh trong vòng lặp, hãy xem câu hỏi này: http://stackoverflow.com/questions/9393038/ssh-breaks-out-of-while-loop-in-bash – Christian