Sed no funciona en espera
Pregunta
Hice este golpe de una sola línea que utilizo para listar casos Weblogic ejecutan junto con sus plenos paths.This funciona bien cuando lo funciono de la cáscara.
/usr/ucb/ps auwwx | grep weblogic | tr ' ' '\n' | grep security.policy | grep domain | awk -F'=' '{print $2}' | sed 's/weblogic.policy//' | sed 's/security\///' | sort
He intentado incorporar esto en un script de esperar
send "echo Weblogic Processes: ; /usr/ucb/ps auwwx | grep weblogic | tr ' ' '\n' | grep security.policy | grep domain | awk -F'=' '{print \$2}' | sed 's/weblogic.policy//' | sed 's/security\///' | sort ; echo ; echo\r"
pero tengo este error sed: -e expresión # 1, char 13: opción desconocida para `s'
Por favor, ayuda
Solución
Sin conteo de cuidado o de las pruebas, que iba a tratar de añadir otro \
después de "seguridad \", o posiblemente eliminando la existente.
Además, se pueden combinar los dos seds en una sola: sed -e 's/weblogic.policy//' -e 's/security\///'
Otros consejos
Probablemente el carácter \
en
sed 's/security\///'
necesita un escape adicional en el contexto de esperar, por ejemplo.
send "echo Weblogic Processes: ; /usr/ucb/ps auwwx | grep weblogic | tr ' ' '\n' | grep security.policy | grep domain | awk -F'=' '{print \$2}' | sed 's/weblogic.policy//' | sed 's/security\\///' | sort ; echo ; echo\r"
El uso de Tcl {} operador en lugar de comillas dobles alrededor de la cadena que desea enviar. La sintaxis {} en Tcl es equivalente a la comilla simple en bash, que significa "cadena literal, no interpretan su contenido".
Dentro de la {} poner exactamente lo que quiere Tcl / Esperar para enviar al subproceso, carácter a carácter, no extra citando necesario.
Creo que esto es demasiado complejo para enviar a un host remoto. En su lugar, poner las órdenes en un pequeño script de shell y ejecutar eso. De esta forma, no se ejecutará en problemas debido a las reglas de expansión cita, escape, etc.
Por otra parte, se debe utilizar en lugar de ssh
expect
ejecutar scripts. expect
es para ejecutar comandos interactivos como ftp
que no tienen capacidades de scripting adecuados.
puede probar a eliminar las comillas simples y ejecutar el comando de nuevo.
send "....... sed s/weblogic.policy// | sed s/security\/// ..."
Sus temas más probablemente citando. Si no es bueno, tratar la sugerencia de hlovdal
Mientras tanto, algunos de los comandos de forma alargada se pueden combinar
/usr/ucb/ps auwwx |grep weblogic| tr ' ' '\n'|awk '/security.policy/&&/domain/{gsub("weblogic.policy|security","",$2);print $2}|sort