lệnh ngày, trở lại một hoặc hai ngày. Nhìn thấy những lá cờ khác nhau


9

Tôi đang viết một tập lệnh bash nên chạy trên OSX và Ubuntu. Tôi không chắc vấn đề cụ thể này có phải do lỗi hệ điều hành không; nhiều khả năng đó là một sự khác biệt trong lệnh date trên hai shell, mặc dù nó bash cả hai? Hãy xem nào.

Trên bash shell của OSX, để in một ngày từ hai ngày trước, chúng tôi đang làm điều này:

date -v-2d +"%Y"."%m"."%d"

-vCờ đó không hợp lệ trên shell bash Ubuntu. Thay vào đó, chúng tôi đang sử dụng:

date --date="2 days ago" +"%Y"."%m"."%d"

Vô tình, --datecờ không được nhận dạng trên vỏ bash OSX của chúng tôi.

Tôi thích một lệnh với các cờ hoạt động trong cả hai trường hợp, liệu có ai biết tôi có thể thử gì không?


Điều này không có gì để làm với bash. Đó là một vấn đề với việc thực hiện khác nhau date.
Cyrus

Câu trả lời:


15

datekhông phải là bashnội dung. Nó là một tiện ích hệ thống và đó là một cái gì đó mà OSX và Linux khác nhau. OSX sử dụng các công cụ BSD trong khi Linux sử dụng các công cụ GNU. Chúng giống nhau nhưng không giống nhau.

Như bạn đã tìm thấy, trên OSX , -dcờ để datekiểm soát thời gian tiết kiệm ánh sáng ban ngày trong khi trên Linux, nó đặt thời gian hiển thị. Trên OSX, -vđiều chỉnh ngày hiển thị nhưng trên Linux, -vcờ là một tùy chọn không hợp lệ.

Đối với hầu hết các phần, cả BSD và GNU đều cố gắng tương thích với tiêu chuẩn POSIX. Tuy nhiên, nếu bạn kiểm tra tiêu chuẩn POSIXdate , bạn sẽ thấy rằng nó không giúp ích gì trong trường hợp này: nó không hỗ trợ bất kỳ cú pháp nào để điều chỉnh ngày.

Nếu bạn muốn mã của mình hoạt động trên cả hai nền tảng, hãy thử:

[ "$(uname)" = Linux ] && date --date="2 days ago" +"%Y"."%m"."%d" || date -v-2d +"%Y"."%m"."%d"

Hoặc (yêu cầu bash):

[ "$OSTYPE" = linux-gnu ] && date --date="2 days ago" +"%Y"."%m"."%d" || date -v-2d +"%Y"."%m"."%d"

-1

Với ksh93 (IMHO tốt hơn nhiều so với bash cho kịch bản), bạn có thể sử dụng printfnội dung, ví dụ:

printf '%(%Y.%m.%d)T' '2 days ago'
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.