123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- #include "libbb.h"
- #define ESC "\033"
- int watch_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
- int watch_main(int argc UNUSED_PARAM, char **argv)
- {
- unsigned opt;
- unsigned period = 2;
- unsigned width, new_width;
- char *header;
- char *cmd;
- #if 0
-
- close(STDIN_FILENO);
- xopen("/dev/null", O_RDONLY);
- #endif
-
-
- opt = getopt32(argv, "^+" "dtn:+" "\0" "-1", &period);
- argv += optind;
-
-
- cmd = *argv;
- while (*++argv)
- cmd = xasprintf("%s %s", cmd, *argv);
- width = (unsigned)-1;
- header = NULL;
- while (1) {
-
- printf(ESC"[H" ESC"[J");
- if (!(opt & 0x2)) {
- const unsigned time_len = sizeof("1234-67-90 23:56:89");
-
-
- new_width = get_terminal_width(STDERR_FILENO);
- if (new_width != width) {
- width = new_width;
- free(header);
- header = xasprintf("Every %us: %-*s", period, (int)width, cmd);
- }
- if (time_len < width) {
- strftime_YYYYMMDDHHMMSS(
- header + width - time_len,
- time_len,
- NULL
- );
- }
-
- printf("%s\n\n", header);
- }
- fflush_all();
-
-
-
- system(cmd);
- sleep(period);
- }
- return 0;
- }
|