¡Cómo ahorrar $ múltiples! en variables y usarlo más tarde en bash?
Quiero obtener los pids de dos procesos en segundo plano,
sleep 20 & pid1=$\!; sleep 10 & pid2=$\!; echo "pid1: $pid1, pid2: $pid2"
y obtener salida como a continuación:
[1] 124646
[2] 124648
pid1: $!, pid2: $!
la salida que deseaba obtener es como:
pid1: 124646, pid2: 124648
Alguien sabe por qué y puede ayudar a lograr esto?
[agregar 2018/01/02]
Perdón por la respuesta realmente tardía, una mano está ocupada, otra es que quiero verificar el guión.
El script real que quiero ejecutar es el siguiente:
sh -c "sleep 20 & pid1=$!; sleep 10 & pid2=$!; echo \"pid1: $pid1, pid2: $pid2\""
y como informarábash: !: event not found
, así que intenté agregar \ y convertirme en:
sh -c "sleep 20 & pid1=$\!; sleep 10 & pid2=$\!; echo \"pid1: $pid1, pid2: $pid2\""
y para simplificar el problema, simplemente me muevosh -c
mientras que esto lo convierte en un problema bastante diferente.
para mi problema, descubrí que el siguiente script funcionará:
sh -c 'sleep 20 & pid1=$!; sleep 10 & pid2=$!; echo "pid1: $pid1, pid2: $pid2"'
Sin embargo, hay otra pregunta, cómo hacer que el siguiente script funcione:
name='bob'
# below script reports 'bash: !: event not found' error
sh -c "echo $name; sleep 20 & pid1=$!; sleep 10 & pid2=$!; echo \"pid1: $pid1, pid2: $pid2\""
# below script $name will not become bob
sh -c 'echo $name; sleep 20 & pid1=$!; sleep 10 & pid2=$!; echo \"pid1: $pid1, pid2: $pid2\"'