one loop for bash loops condition

loop - Bash espera el inicio del proceso



if bash (3)

Hay varios problemas con su código:

  1. pidof no imprime 0 o -1 si no hay proceso, por lo que su lógica es incorrecta
  2. pidof puede devolver múltiples pids si hay múltiples procesos, lo que rompería su comparación
  3. > tiene que ser escapado en [ ] contrario su código es equivalente a [ $notepad ] > 0 , dirigiendo a un archivo.
  4. > ni siquiera es el operador correcto. Querías -gt , pero como se menciona en el punto 1 y 2, no deberías comparar números.
  5. until ejecute el ciclo hasta que la condición sea verdadera. no espera a que la condición se vuelva verdadera y luego ejecuta el ciclo.

Así es como debes hacerlo:

# Wait for notepad to start until pids=$(pidof notepad) do sleep 1 done # Notepad has now started. # There could be multiple notepad processes, so loop over the pids for pid in $pids do taskset -p 03 $pid renice -n 5 -p $pid sleep 5 renice -n 0 -p $pid done # The notepad process(es) have now been handled

Estoy tratando de decirle a Bash, espere un Inicio / Inicio del Proceso. Lo estoy intentando de esta manera, por ejemplo:

notepad=`pidof notepad.exe` until [ $notepad > 0 ] do taskset -p 03 $notepad renice -n 5 -p $notepad sleep 5 renice -n 0 -p $notepad done

bueno, tengo las siguientes preguntas:

  1. ¿Por qué esto genera un archivo llamado "0" (el archivo está vacío)? No quiero hacer un nuevo archivo, simplemente espere a que el PID verifique la ejecución.

  2. Esto es un bucle, pero si los 2 comandos son correctos, ¿cómo puedo continuar?

  3. Para esto es mejor usar "hasta o cuando" ???

  4. ¿Otra idea para esperar Start o Begin?


Si entiendo correctamente, quiere esperar hasta que se abra el bloc de notas. Entonces el pidof debe estar dentro de tu loop.

while ! pidof notepad.exe >> /dev/null ; do sleep 1 done notepad=$(pidof notepad.exe) taskset -p 03 $notepad renice -n 5 -p $notepad sleep 5 renice -n 0 -p $notepad


Para responder a su primera pregunta: ''>'' no es el operador matemático / de comparación ''mayor que''; es la forma de bash de permitirle canalizar la salida a un archivo (manejar).

echo "some text" > myfile.txt

creará un archivo llamado myfile.txt, y ''>'' enviará la salida del comando a ese archivo. Me imagino que su archivo ''0'' tiene el pid en él, y nada más.

En su lugar, pruebe -gt (o variantes relacionadas: -ge , -lt , -le , -ne , -ne ) para comprobar si un valor es mayor que (o: mayor que o igual, menor que, menor que o igual, igual , no igual, respectivamente) para ver si eso ayuda. Es decir,

until [ $notepad -gt 0 ]