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

¿Fue útil?

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 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top