$(ipcs | awk '{print $2}')
nunca é igual a Semaphore
. É sempre igual a:
Shared shmid 262145 294914 2326531 Semaphore semid Message msqid
Você provavelmente quer algo como:
for e in $(ipcs | awk '{print $2}'); do
[[ "$e" = "Semaphore" ]] && break
echo $e
done
echo
exit 0
Você também pode gostar deste awk
solution:
ipcs | awk '$2 == "Semaphore" {exit;} $2 != "" {print $2}'
Uma pequena explicação:
- Se o segundo campo for Semáforo , saia.
- Caso contrário, se este campo não estiver vazio, imprima-o.
Aqui estão algumas soluções alternativas (supondo que eu entendi suas necessidades aqui):
# List all shared memory segments keys
ipcs -m | awk 'NR > 3 && $1 != "" {print $1}'
# List all shared memory segments IDs
ipcs -m | awk 'NR > 3 && $2 != "" {print $2}'
Para cada um desses exemplos, você pode repetir o resultado:
for e in $(above command); do
echo $e
done