Tại sao tên tệp chứa dấu chấm hỏi khi tôi chạy tập lệnh trên máy từ xa?


10

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.


Thông thường ?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ủa env|grep -E '(LC|LANG)'?
0xC0000022L

@ 0xC0000022L Đầu ra là LANG=en_US.UTF-8.
Gottlieb Notschnabel

xin lỗi vì không rõ ràng Tôi có nghĩa là đầu ra trên cả hai đầu.
0xC0000022L

Xin lỗi vì đã bỏ lỡ điều đó ... Thật không may, lệnh này không tạo ra bất cứ điều gì trên Windoze: /
Gottlieb Notschnabel

1
Bạn có biết rằng chuỗi chuyển hướng ( 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
glenn jackman

Câu trả lời:


17

Bạn có thể có một số ký tự không in được ở cuối dòng (ví dụ: CRLF từ Windows), chạy:

cat -A scriptname

trên máy từ xa, nó sẽ hiển thị cho bạn tất cả các ký tự trong tập lệnh của bạn. Sau đó, bạn có thể chuyển đổi sang định dạng giống như đang chạy

dos2unix scriptname

3

Tìm thấy Notepad ++ rất hữu ích để sửa lỗi này sau khi thử câu trả lời

cat -A scriptname>

dos2unix scriptname

vì điều này vẫn xuất hiện lỗi khi cố gắng chuyển đổi.

Thông qua Notepad ++, có tùy chọn trong menu chỉnh sửa / Chuyển đổi EOL / Định dạng Unix / OSX.

Vẫn còn rất nhiều người học nhưng phương pháp này đã giải quyết vấn đề của tôi, tuy nhiên giải pháp trước đó đã hỗ trợ trong việc tìm ra vấn đề ở đâu.

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.