Câu hỏi Thêm dấu thời gian hiện tại vào tên tệp từ lệnh chạy nền


Sau đây là lệnh mà tôi đã sử dụng trong bash script và nó được chạy trên nền:

sshpass -p prakash12 ssh -t -p $1 prakash@localhost './test_new_update_script.sh > /home/log/unit_update_output.log 2> /home/log/unit_update_error.log < /dev/null | echo $! > /home/log/unit_update_pids &'

Lệnh này đã tạo 3 tệp vào lúc chạy, tức là unit_update_output.log, unit_update_error.log và unit_update_pids. Và in thông tin liên quan. trong các tệp đó.

Tôi muốn nối thêm current timestamp ở cuối mỗi tên 3 tệp.

Như: unit_update_output-2014-04-08T22-15-02.log   "2014-04-08T22-15-02" đây là dấu thời gian hiện tại.

Lệnh trên đang chạy trên nền:

Vì vậy, làm thế nào tôi có thể làm điều này?


4
2018-04-08 16:48


gốc




Các câu trả lời:


Cho dù lệnh được đặt nền hay không là không liên quan, tất cả những gì bạn cần làm là thêm đầu ra của date gọi đến tên tập tin bạn đang tạo. Sử dụng cú pháp chính xác giống như trong câu hỏi của bạn, bạn có thể làm:

sshpass -p prakash12 ssh -t -p $1 prakash@localhost \
    './test_new_update_script.sh > /home/log/unit_update_output.$(date '+%F-%T').log \
     2> /home/log/unit_update_error.$(date '+%F-%T').log < /dev/null | 
     echo $! > /home/log/unit_update_pids$(date '+%F-%T') &'

Bí quyết đang thêm $(date '+%F-%T')., điều này sẽ trở lại (ví dụ):

$ date '+%F-%T'
2014-04-08-18:54:52

Vì vậy, lệnh trên sẽ tạo:

/home/log/unit_update_output.2014-04-08-18:57:02.log 
/home/log/unit_update_error.2014-04-08-18:57:02.log 
/home/log/unit_update_pids2014-04-08-18:57:02

Xem man date cho các định dạng khác nhau mà bạn có thể có.


4
2018-04-08 16:57



Nó hoạt động hoàn hảo. - Prakash V Holkar