python -m HTTPSimpleServer & # Your Python process will now be in the background
serverpid="$!" # Capture its PID so that you can kill it later.
watch -n /path/to/AwesomeTestCommand Arg1 Arg2
# Some time later...
kill "$serverpid" # Make your Python process go away
$ date +'%s%3N'
1506298414529
Строгое решение bash (без внешних исполняемых файлов )невозможно, начиная с bash 4.2:
$ printf '%(%s)T\n' "-1"
1506298414
$ printf '%(%Y%m%d-%H:%M:%S)T\n' "-1"
20170924-20:13:34
Но это не позволяет ни миллисекунды, ни наносекунды (пока ).
Чтобы получить миллисекунды или наносекунды, вам нужно использовать дату GNU, как это:
$ printf '%s\n' "$(date +'%Y%m%d-%H:%M:%S.%N')"
20170924-20:13:34.326113922
Или
$ printf '%s\n' "$(date +'%s.%N')"
1506298414.529678016
Ограничение до 3 цифр в дробной части секунд может быть получено с помощью формата %.3f
для printf:
$ printf '%.3f\n' "$(date +'%s.%N')"
1506298414.529
Или, что лучше, используйте возможность уменьшить количество цифр, которое допускает формат даты в наносекундах:
$ printf '%s\n' "$(date +'%s.%3N')"
1506298414.529
И тогда точку можно убрать:
$ printf '%s\n' "$(date +'%s%3N')"
1506298414529
Конечно, в данном случае более подходящим кажется более простое решение (без printf вместо того, что было задано ):
$ date +'%s%3N'
1506298414529
Начиная с bash5+ существует простое решение:
$ printf "%.3f\n" $EPOCHREALTIME
1566917328.786
Если точка не нужна:
printf "%s\n" "$((${EPOCHREALTIME/.}/1000))"
Укажите время в миллисекундах с начала эпохи все -в -одна -строка -из -текст, атомарный (один вызов внутренней переменной bash ), облегченный и нет проблемы с квантованием или округлением.