Cách chuyển hướng thông báo lỗi sang tệp nhật ký trong tập lệnh shell


0

Tôi đang thực hiện lệnh bên dưới để lưu trữ các tệp / thư mục phù hợp tuy nhiên nếu tôi không tìm thấy bất kỳ kết quả khớp nào thì tôi nhận được thông báo lỗi trên bảng điều khiển

 matching_files=`ls -d $log_dir/$pattern`

ls: cannot access /logs/archive_file*: No such file or directory
ls: cannot access /logs/archive_dir*: No such file or directory

Tôi muốn ghi lại các lỗi này trong một tệp thay vì hiển thị trên bàn điều khiển Làm thế nào để đạt được điều này trong shell script?

Câu trả lời:


0

Bạn không nên sử dụng lstất cả. Tôi giả sử bạn đang sử dụng bash. Chúng ta sẽ chỉ sử dụng các ký tự toàn cầu shell để lưu trữ các tệp trong một mảng:

matching_files=( $log_dir/$pattern )
if [[ "${#matching_files[@]}" -eq 0 ]]; then
    echo "no files found"
else
    echo "I found these matching files:"
    printf "%s\n" "${matching_files[@]}"
fi

for file in "${matching_files[@]}"; do
    do_something_with "$file"
done

Nó không lưu trữ tất cả các tệp phù hợp trong biến khớp_files nếu chúng tôi sử dụng khớp_files = ($ log_dir / $ mẫu)
người dùng

Bạn có thể hiển thị một ví dụ nơi tìm thấy các tập tin lsnhưng bị thiếu ở đây không?
glenn jackman

matching_files = (/ logs / magsubmit_ *) sau đó echo $ matching_files sẽ cung cấp duy nhất tập tin -> /logs/magsubmit_dir_1.log mặc dù có 4 file tương ứng trong bản ghi dir
sử dụng

Biến khớp_files là một mảng . echo $matching_filessẽ chỉ hiển thị các yếu tố đầu tiên. Làm printf "%s\n" "${matching_files[@]}"để xem tất cả
glenn jackman
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.