Tôi có một tập lệnh nhỏ chỉ đơn giản là tìm nạp ngày hiện tại, chạy tập lệnh PHP và chuyển hướng đầu ra (và lỗi) sang tên tệp chứa ngày hiện tại.
DATE=$(date +"%Y%m%d")
FILE="log/${DATE}.log"
php -q script.php >> $FILE 2>&1
Khi tôi chạy kịch bản này trên máy tính địa phương của tôi (Windows 7, Aptana IDE), kịch bản PHP hoạt động tốt và logfile có tên tập tin mong muốn, ví dụ 20140502.log
.
Nhưng khi tôi đẩy tập lệnh đó qua SFTP đến máy từ xa của mình và thực thi tập lệnh đó, tên tệp trông như thế này:
20140502?.log?
Rắc rối có thể là cái gì? Đây có phải là một lỗi đáng sợ (ví dụ: mã hóa cho tải lên SFTP là ANSII, nơi dự kiến UTF-8)? Hay tôi phải thay đổi bất cứ điều gì trong chính kịch bản?
Thông tin về hệ thống / shell:
[foo@bar path]$ sh --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
Sự thật buồn cười: Nếu kịch bản đó được gọi bởi một cronjob, các dấu hỏi sẽ không xảy ra. Chỉ khi tôi tự chạy tập lệnh.
LANG=en_US.UTF-8
.
2>&1 >> $FILE
) này gửi stderr đến terminal và stdout vào tệp không? Nếu bạn muốn stderr cũng đi đến tập tin, bạn cần>> $FILE 2>&1
?
chỉ ra rằng một ký tự không thể được hiển thị. Chắc chắn âm thanh như một sự khác biệt mã hóa. Bạn có thể cho chúng tôi đầu ra củaenv|grep -E '(LC|LANG)'
?