Возьмите источник команды file. Большинство, если не все открытые источники, используют эту. Команда file
поставляется с базой данных magic
, названной в честь магических чисел, которые она описывает. (Эта база данных также установлена на вашей живой системе, но в скомпилированном виде). Найдите файл, содержащий текст описания, который вы видите:
grep 'Berkeley DB' magic/Magdir/*
В magic
man page описан формат файла. Строки запуска для "Berkeley DB" следующие
0 long 0x00061561 Berkeley DB
0 belong 0x00061561 Berkeley DB
12 long 0x00061561 Berkeley DB
12 belong 0x00061561 Berkeley DB
12 lelong 0x00061561 Berkeley DB
12 long 0x00053162 Berkeley DB
12 belong 0x00053162 Berkeley DB
12 lelong 0x00053162 Berkeley DB
12 long 0x00042253 Berkeley DB
12 belong 0x00042253 Berkeley DB
12 lelong 0x00042253 Berkeley DB
12 long 0x00040988 Berkeley DB
12 belong 0x00040988 Berkeley DB
12 lelong 0x00040988 Berkeley DB
В первом столбце указано смещение, по которому должна быть найдена определенная последовательность байтов. Третий столбец содержит последовательность байтов. Второй столбец описывает тип последовательности байтов: long
означает 4 байта в порядке платформы endian; lelong
и belong
означают 4 байта в порядке little-endian и big-endian соответственно.
Вместо того чтобы повторять правила, вы можете вызвать утилиту file
; она определена POSIX, но форматы, которые она распознает, и описания, которые она выводит, не определены. В качестве альтернативы вы можете подключить libmagic
и вызвать функцию magic_file
или magic_buffer
.
Debe proporcionar los identificadores de proceso (PID )a wait
. Además, según su descripción, no parece que su comando esté bloqueando, lo que en última instancia dificultaría la recopilación de los PID que desea esperar. P.ej. si el proceso se bifurca y le permite continuar con la secuencia de comandos sin conocer el PID de los nuevos procesos bifurcados.
Pero en caso de que su línea nohup sh -c...
esté bloqueada, desea enviarla al fondo con &
, guarde el PID de los procesos en segundo plano y finalmente espere todos los PID que guardó (, p. en$WAIT_FOR_PIDS
). La variable $!
le da el PID del último proceso enviado a ejecución en segundo plano.
WAIT_FOR_PIDS="";
echo "$wk" | while read -r a b;
do
counter=$(($counter+1))
nohup sh -c 'impala-shell -d nielsen -f query.sql --var=dt=$a --var=incre=$b;
echo $a,$?>>$week_status_file;
if [ $? -ne 0 ]; then
echo $a,$b>>$err_week_file
fi' & WAIT_FOR_PIDS="$WAIT_FOR_PIDS $!"
if [ $(($counter%5)) == 0 -a $counter -ge 5 ];
then
echo "Check"
wait $WAIT_FOR_PIDS
WAIT_FOR_PIDS=""
fi
done
También deberías pensar en las condiciones de carrera mientras haces eco en paralelo en $week_status_file
. Consulte man flock
para obtener información sobre el bloqueo de archivos fácilmente accesible desde el shell.