Có phải trong dòng lệnh Linux có thể lặp lại lệnh sau mỗi n giây không?
Nói rằng, tôi có một nhập khẩu đang chạy, và tôi đang làm
ls -l
để kiểm tra nếu kích thước tập tin đang tăng lên. Tôi muốn có một lệnh để lặp lại điều này tự động.
Có phải trong dòng lệnh Linux có thể lặp lại lệnh sau mỗi n giây không?
Nói rằng, tôi có một nhập khẩu đang chạy, và tôi đang làm
ls -l
để kiểm tra nếu kích thước tập tin đang tăng lên. Tôi muốn có một lệnh để lặp lại điều này tự động.
Câu trả lời:
Xem cứ sau 5 giây ...
watch -n 5 ls -l
Nếu bạn muốn có xác nhận trực quan về các thay đổi, hãy thêm vào --differencestrướcls lệnh.
Theo trang người đàn ông OSX, cũng có
Tùy chọn --cumulation làm nổi bật "dính", hiển thị màn hình đang chạy của tất cả các vị trí đã từng thay đổi. Tùy chọn -t hoặc --no-title tắt tiêu đề hiển thị khoảng thời gian, lệnh và thời gian hiện tại ở đầu màn hình, cũng như dòng trống sau.
Trang người dùng Linux / Unix có thể được tìm thấy ở đây
watch mysql dbname -e \"show processlist\;\"
                    brew install watch
                    while true; do
    sleep 5
    ls -l
done
              watchcũng có tác dụng phụ đáng tiếc trong việc xóa màn hình, vì vậy đôi khi vòng lặp rất hữu ích. Việc sử dụng phụ thuộc vào định dạng mong muốn của đầu ra.
                    --differencesđể làm nổi bật chúng (Nếu bạn lo lắng về việc sơn lại thiết bị đầu cuối)
                    watch. Đồng hồ không hoạt động chẳng hạn khi bạn muốn tạo số ngẫu nhiên trong mỗi lần gọi, vd watch -n 1 echo ${RANDOM}. Sự ngẫu nhiên sẽ chỉ được gọi một lần.
                    "xem" không cho phép phân số của một giây trong Busybox, trong khi "ngủ" thì không. Nếu điều đó quan trọng với bạn, hãy thử điều này:
while true; do ls -l; sleep .5; done
              sleepđã trở lại 0. Như vậy, tôi đang sử dụng:
while sleep 3 ; do ls -l ; done
Đây là một chút ngắn hơn so với giải pháp của mikhail. Một nhược điểm nhỏ là nó ngủ trước khi chạy lệnh đích lần đầu tiên.
Nếu lệnh chứa một số ký tự đặc biệt như ống dẫn và dấu ngoặc kép, lệnh cần được đệm bằng dấu ngoặc kép. Ví dụ, để lặp lại ls -l | grep "txt", lệnh xem phải là:
watch -n 5 'ls -l | grep "txt"'
Chạy các lệnh định kỳ mà không có cron là có thể khi chúng ta đi với while.
Như một lệnh:
while true ; do command ; sleep 100 ; done &
[ ex: # while true;  do echo `date` ; sleep 2 ; done & ]
Thí dụ:
while true
do echo "Hello World"
sleep 100
done &
Đừng quên cuối cùng &vì nó sẽ đặt vòng lặp của bạn trong nền. Nhưng bạn cần tìm id tiến trình với lệnh "ps -ef | grep your_script" thì bạn cần phải giết nó. Vì vậy, vui lòng thêm '&' khi bạn chạy tập lệnh.
# ./while_check.sh &
Đây là vòng lặp tương tự như một kịch bản. Tạo tập tin "while_check.sh" và đặt nó vào trong đó:
#!/bin/bash
while true; do 
    echo "Hello World" # Substitute this line for whatever command you want.
    sleep 100
done
Sau đó chạy nó bằng cách gõ bash ./while_check.sh &
echo $!sau khi mỗi quy trình nền được khởi chạy - đó là PID của quy trình con cuối cùng được khởi chạy trong nền.
                    echo `date` chỉ là một cách nghèo nàn và hơi lỗi để viết date. (Lỗi này có liên quan đến việc thiếu trích dẫn của đối số echo.) Xem thêm cách sử dụng vô dụng echo. 
                    Nếu bạn muốn tránh "trôi", nghĩa là bạn muốn lệnh thực thi cứ sau N giây bất kể lệnh mất bao lâu (giả sử mất ít hơn N giây), đây là một số bash sẽ lặp lại lệnh cứ sau 5 giây với một- độ chính xác thứ hai (và sẽ in ra một cảnh báo nếu không thể theo kịp):
PERIOD=5
while [ 1 ]
do
    let lastup=`date +%s`
    # do command
    let diff=`date +%s`-$lastup
    if [ "$diff" -lt "$PERIOD" ]
    then
        sleep $(($PERIOD-$diff))
    elif [ "$diff" -gt "$PERIOD" ]
    then
        echo "Command took longer than iteration period of $PERIOD seconds!"
    fi
done
Nó vẫn có thể trôi đi một chút vì giấc ngủ chỉ chính xác đến một giây. Bạn có thể cải thiện độ chính xác này bằng cách sử dụng sáng tạo lệnh ngày.
Bạn có thể chạy như sau và chỉ lọc kích thước. Nếu tập tin của bạn được gọi,   somefilenamebạn có thể làm như sau
while :; do ls -lh | awk '/some*/{print $5}'; sleep 5; done
Một trong nhiều ý tưởng.
watch -n 5 'ls -l 
Sẽ chạy ls -llệnh sau mỗi 5s
Every 5.0s: ls -l                                                                                                      Fri Nov 17 16:28:25 2017
total 169548
-rw-rw-r--  1 sachin sachin     4292 Oct 18 12:16 About_us_Admission.doc
-rw-rw-r--  1 sachin sachin      865 Oct 13 15:26 About_us_At_glance.doc
-rw-rw-r--  1 sachin sachin     1816 Oct 13 16:11 About_us_Principle.doc
-rw-rw-r--  1 sachin sachin     1775 Oct 13 15:59 About_us_Vission_mission.doc
-rw-rw-r--  1 sachin sachin     1970 Oct 13 16:41 Academic_Middle_school.doc
-rw-rw-r--  1 sachin sachin      772 Oct 16 16:07 academics_High_School.doc
-rw-rw-r--  1 sachin sachin      648 Oct 16 13:34 academics_pre_primary.doc
-rw-rw-r--  1 sachin sachin      708 Oct 16 13:39 academics_primary.doc
-rwxrwxr-x  1 sachin sachin     8816 Nov  1 12:10 a.out
-rw-rw-r--  1 sachin sachin    23956 Oct 23 18:14 Ass1.c++
-rw-rw-r--  1 sachin sachin      342 Oct 23 22:13 Ass2.doc
drwxrwxr-x  2 sachin sachin     4096 Oct 19 10:45 Backtracking
drwxrwxr-x  3 sachin sachin     4096 Sep 23 20:09 BeautifulSoup
drwxrwxr-x  2 sachin sachin     4096 Nov  2 00:18 CL_1
drwxrwxr-x  2 sachin sachin     4096 Oct 23 20:16 Code
drwxr-xr-x  2 sachin sachin     4096 Nov 15 12:05 Desktop
-rw-rw-r--  1 sachin sachin        0 Oct 13 23:12 doc
drwxr-xr-x  4 sachin sachin     4096 Nov  6 21:18 Documents
drwxr-xr-x 27 sachin sachin    12288 Nov 17 13:23 Downloads
-rw-r--r--  1 sachin sachin     8980 Sep 19 23:58 examples.desktop
              Một giải pháp ngắn gọn, đặc biệt hữu ích nếu bạn muốn chạy lệnh liên tục cho đến khi thất bại và cho phép bạn xem tất cả đầu ra.
while ls -l; do
    sleep 5
done