Попытка:
wget http://mymusic.store.com/musicfoo.mp3 && mplayer musicfoo.mp3
&&
означает, "после того как команда левой стороны успешно завершилась". Это предполагает, что команда левой стороны не разветвляет или использует нестандартные значения статуса выхода. Я сомневаюсь, что wget делает последнего, и, пока Вы не используете -b
переключатель, это не должно делать первого также.
EVAL
может помочь этому случаю ...
~ $ $(echo expr 1 \\* 2)
+ echo expr 1 \* 2
+ expr 1 \* 2
expr: syntax error
~ $ eval $(echo expr 1 \\* 2)
+ echo expr 1 \* 2
+ eval expr 1 \* 2
+ expr 1 * 2
2
, но может быть лучше посмотреть вверх / proc / $ pid / stat
на Linux.
pid=1155
hz=$(getconf CLK_TCK)
uptime=$(awk '{print $1}' < /proc/uptime)
starttime=$(awk '{print $22}' < /proc/$pid/stat)
echo $(( ${uptime%.*} - $starttime / $hz ))
Если / usr / bin / getcconf
недоступно, вам нужно найти вашу систему CLK_TCK
(или user_hz
) значение. Я думаю, что вы можете предположить, что это 100 в большинстве случаев.
POSIX one:
$ { printf %s insertedtext; cat <./input_file; } >/tmp/output_file
$ mv -- /tmp/output_file ./input_file
-121--65928- Из руководства ( man bash
):
При выходе из оболочки входа bash считывает и выполняет команды из файлов ~/.bash _ logout и/
, если файлы существуют.
Имеется еще один ответ на U & L SE в сообщениях входа в систему.
-121--125516- Что смущает, я, кажется, не смог проверить так полностью, как я думал. Оказывается, что изменение того, что я разместил в своем вопросе, чтобы он содержал только два побега (\\*
), делает его прекрасным.
root@embedded:~# $(/opt/bin/busybox ps -o pid,etime | sed -n "s/ *1155 \+\([0-9]\+\):\([0-9]\+\).*/expr \1 \\* 60 + \2/p")
$(/opt/bin/busybox ps -o pid,etime | sed -n "s/ *1155 \+\([0-9]\+\):\([0-9]\+\).*/expr \1 \\* 60 + \2/p")
+ /opt/bin/busybox ps -o pid,etime
+ sed -n s/ *1155 \+\([0-9]\+\):\([0-9]\+\).*/expr \1 \* 60 + \2/p
+ expr 293 * 60 + 54
17634
Обратите внимание, что я также интегрировал grep
в sed
с подходом -n 's///p'
(глобальный n o-print и затем p rint on match).
Спасибо @ yaegashi, что заставил меня повторить попытку \\
...
Процесс от препарата составляет 16752 (который вы, кажется, сможете выяснить)
expr $(date +%s) - $(stat -c %Y /proc/16752/environ )
, где
дата +% S
является текущей датой вторым, после эпохи stat -c% y / proc / 16752 / Enviry
- «Дата создания» / ProC / 16752 / Enviry, это момент, когда был запущен ProC # 16752 Редактировать:
Может быть, ProC / $ PID / Environ
- неправильный псевдо-файл, / ProC / $ PID / EXE
.
Если время изменилось на хосте, оба результата из PS -P $ PID -H -O etime
и Timestamp от / proc / $ pid / exe
, вероятно, будут неправы. (не уверены, как проверить это).
@yaegashi правильно применил подход, но мой вызов sed
, кажется, вводит необходимость в третьем \
.
root@embedded:/data# set -vx
root@embedded:/data# echo Process Uptime: $(eval $(/opt/bin/busybox ps -o pid,etime | sed -n "s/ *${APP_PID} \+\([0-9]\+\):\([0-9]\+\).*/expr \1 \\\* 60 + \2/p"))
echo Process Uptime: $(eval $(/opt/bin/busybox ps -o pid,etime | sed -n "s/ *${APP_PID} \+\([0-9]\+\):\([0-9]\+\).*/expr \1 \\\* 60 + \2/p"))
+ /opt/bin/busybox ps -o pid,etime
+ sed -n s/ *1156 \+\([0-9]\+\):\([0-9]\+\).*/expr \1 \\* 60 + \2/p
+ eval expr 2 \* 60 + 46
+ expr 2 * 60 + 46
+ echo Process Uptime: 166
Process Uptime: 166
Скрестили пальцы, что это не только работает сейчас, но и будет работать в следующий раз, когда я буду использовать его ...
Это awk-скрипт, который преобразует вывод 0 -00 :00 :00 в секунды. Используется так...
ps -eo pid,time,user,comm | awk '{print $1"|"$2"|"$3"|"$4$5$6$7$8$9$10}' | awk -f _os_return_process_time_in_seconds.awk
Вот сценарий. Просто написал если для другой цели. Может еще есть проблемы.
BEGIN {
FS="|"
}
{
pid=$1
time=$2
user=$3
comm=$4
split_count=split($2,days_array,"\-")
if ( split_count == 2 ) {
days=days_array[1]
hr_min_sec=days_array[2]
}
else {
days=0
hr_min_sec=days_array[1]
}
split_count=split(hr_min_sec,hr_min_sec_array,":")
if ( split_count == 3 ) {
hours=hr_min_sec_array[1]
minutes=hr_min_sec_array[2]
seconds=hr_min_sec_array[3]
}
else if ( split_count == 2 ) {
hours=0
minutes=hr_min_sec_array[1]
seconds=hr_min_sec_array[2]
}
else if ( split_count == 1 ) {
hours=0
minutes=0
seconds=hr_min_sec_array[1]
}
total_seconds=(days*24*60*60)+(hours*60*60)+(minutes*60)+(seconds)
print pid"|"total_seconds"|"user"|"comm
}