Всем привет.
На машине, где работать должен скрипт, нет способа вывести время в формате: "количество секунд с 00:00:00 1970". Это hp-ux.
Есть команды:
`date -u +%S`
`date -u +%m`
Время выполнения ряда команд составляет порядка 3-4 минут. Как вычислить время работы скрипта с такими условиями?
Вот примерный мой вариант:
Код:
ts1=`date -u +%S`
tm1=`date -u +%m`
#
#some commands rownin' 'bout 3 min.
#
ts2=`date -u +%S`
tm2=`date -u +%m`
tm2-tm1
if ts2 < ts1; then
C=60-ts1+ts2
else C=ts2-ts1
fi
cat tm2-tm1 C
P.S. Это не рабочий кусок кода, а примерный мой алгоритм, который я восстановил по памяти.
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.
Кстати, в BASH есть переменная SECONDS, содержащая время работы текущей оболочки в секундах. Так что достаточно будет взять значения этой переменной до и после выполнения этих долгих команд, а разность полученных значений как раз и будет временем их работы.
time on its own executes the built-in shell command of that name, which doesn't take the options that the standalone program /usr/bin/time does. So use the full path to the time command in your script ... /usr/bin/time -f % etc....
Вся соль как раз у меня и была в том, чтобы запустить эту команду. :) Запустить ее получилось таким способом. :) Других вариантов я не смог придумать. :)
Ну да, есть не GNU, а POSIX версия time, но её можно и снести и оставить только современную версию.
(halo) писал(а):Вся соль как раз у меня и была в том, чтобы запустить эту команду. Запустить ее получилось таким способом. Других вариантов я не смог придумать.
То есть?)) Когда вы пишите в shell, например, abrakadabra, он ищет программу с точно с таким названием в /bin, /usr/bin, и даже /usr/local/bin (!) )
То есть?)) Когда вы пишите в shell, например, abrakadabra, он ищет программу с точно с таким названием в /bin, /usr/bin, и даже /usr/local/bin (!) smile.gif)
Ищет по путям перечисленным в переменной PATH слева направо до первого совпадения.
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.
nesk, это я и имел в виду. Разве что на машине PATH будет обнулена (или обнулена в к-н окружении), или нужная версия программы будет лежать "дальше" (например свеже-откомпилированная ляжет в /usr/local/bin, а стандартная будет в /bin) - тогда нужно прописывать полный путь.
nesk, это я и имел в виду. Разве что на машине PATH будет обнулена (или обнулена в к-н окружении), или нужная версия программы будет лежать "дальше" (например свеже-откомпилированная ляжет в /usr/local/bin, а стандартная будет в /bin) - тогда нужно прописывать полный путь.
Смотря кто будет запускать этот скрипт. Возможно это будет демон в среде которого PATH не определена. А возможно это будет пользователь, который поменяет у себя переменную PATH, так что бы вместо стандартных программ, выполнялись какие то левые.
Но в обще это к основному вопросу темы не относиться. Писать полный путь к программе в скрипте - это наверно хороший тон.
Например некоторые линуксойды даже в командной строке вызывают команду sudo указывая полный путь /usr/bin/sudo
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.
(nesk) писал(а):Писать полный путь к программе в скрипте - это наверно хороший тон.
Посмотрел на Ъ скрипты - да, там полные пути. Как я понял, единственная причина для этого - безопастность.
По теме - если time всё-таки POSIX версии, то вариант выше не пойдёт. Почему-то не получается переправить результат time в файл, наверно потому что это не внешняя программа, а встроенная в shell команда:
По теме - если time всё-таки POSIX версии, то вариант выше не пойдёт. Почему-то не получается переправить результат time в файл, наверно потому что это не внешняя программа, а встроенная в shell команда:
Ну да, есть не GNU, а POSIX версия time, но её можно и снести и оставить только современную версию.
При чём здесь GNU и POSIX версии? Там ведь написано, что без пути вызывается встроенная команда shell. А GNU вообще не имеет отношения к теме: у автора HP-UX (см. первый пост).
В чем проблема? Под hp-ux не хочет работать. Под linux работает нормально. :)
Читать пытаюсь man time в hp-ux. Там описан только параметр "-p". Вообще все как-то куцо.
Сломал весь мозг. Задача вроде проста.
Пишу что-то вроде:
echo "`/usr/bin/time /home/some_folder/damn_func_x`" > /home/some_folder/some_period
Вместо задуманной мной записи в файл он выкидывает данные в терминал. Что за хрееееень? =\
upd. Качаю сейчас FreeBSD, может под ней что-то hp-ux-подобное будет.
На MinGW вроде бы POSIX версия и там нет ключей -f и -o (у меня по крайней мере нет).
А MinGW-то здесь при чём? Вы понимаете, что такое встроенная команда оболочки? И если у POSIX-версии команды time нет определённых ключей, это вовсе не означает, что всё, у чего их нет, суть POSIX-версии. Насколько я помню HP-UX, встроенная в тамошнюю оболочку команда time стандарту не вполне соответствует. Но суть не в этом, а в том, что встроенную команду физически невозможно, как Вы говорите, "снести". И что "шпуксовая" внешняя команда time не имеет никакого отношения к GNU -- это уж вне всяких сомнений.
(t.t) писал(а):И если у POSIX-версии команды time нет определённых ключей, это вовсе не означает, что всё, у чего их нет, суть POSIX-версии.
Понятно, просто перепутал достаточное и необходимое условие, как говорится.
drBatty, это nesk писал, что кто-то набирает в оболочке полный путь к sudo, чтобы обезопасить себя. Разве не проще сделать такой alias (sudo через sudo)?
die sheep! die to reverse the system
you accept (reject, respect);
next step,
kill next sacrifice, each sacrifice
drBatty, это nesk писал, что кто-то набирает в оболочке полный путь к sudo, чтобы обезопасить себя. Разве не проще сделать такой alias (sudo через sudo)?
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.
Как подделать alias рута если он прописан в .bashrc, права на который имеет только рут?
наверное имелось ввиду беспарольное sudo от юзера.
кстати, алиас рута нет смысла подделывать - у алиасов нет хозяев. и всегда работает unalias. т.е. рут может как-то сделать юзеру алиас (например покрутить /etc/profile), да только юзер его сможет изменить. На самом деле - алиасы это "переменные" оболочки, и выходя из оболочки мы их теряем...
Т.ч. рутовым алиасом из рутового /root/.bashrc может пользоваться только рут. и подделать его может только рут.