Question

J'ai fait ce bash one-liner que j'utilise pour lister les instances de Weblogic en cours d'exécution ainsi que leurs pleins paths.This fonctionne bien quand je le lance à partir du shell.

/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

J'ai essayé d'intégrer cela dans un script expect

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"

mais j'eu cette erreur sed: expression -e # 1, char 13: option inconnue à `l

S'il vous plaît aider

Était-ce utile?

La solution

Sans compter ou un examen approfondi, je vais essayer d'ajouter un autre \ après la « sécurité \ », ou supprimer éventuellement l'existant.

En outre, vous pouvez combiner les deux seds en un seul: sed -e 's/weblogic.policy//' -e 's/security\///'

Autres conseils

Probablement le caractère \ dans

sed 's/security\///'

a besoin d'une évasion supplémentaire dans expect contexte, par exemple.

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"

Utilisez l'opérateur {} Tcl au lieu de guillemets doubles autour de la chaîne que vous souhaitez envoyer. La {} syntaxe Tcl est équivalente à guillemet simple dans bash, ce qui signifie « chaîne littérale, ne pas interpréter son contenu ».

A l'intérieur du {} mettre exactement ce que vous voulez Tcl / Attendez-vous à envoyer au sous-processus, le caractère pour le caractère, sans supplément de cotation demandée.

Je pense que cela est trop complexe pour envoyer vers un hôte distant. Au lieu de cela, mettre les commandes dans un petit script shell et exécuter que. De cette façon, vous ne serez pas des ennuis en raison des règles d'expansion de devis, Évasion, etc.

De plus, vous devez utiliser ssh au lieu de expect pour exécuter des scripts. expect est pour l'exécution des commandes interactives comme ftp qui n'ont pas les capacités de script appropriées.

vous pouvez essayer de supprimer les guillemets simples et exécutez la commande à nouveau.

send "....... sed s/weblogic.policy// | sed s/security\/// ..."

Les problèmes les plus probablement en citant. Si ce ne est pas correct, essayez la suggestion hlovdal

Pendant ce temps, certaines de vos commandes oblongues peuvent être combinés

/usr/ucb/ps auwwx |grep weblogic| tr ' ' '\n'|awk '/security.policy/&&/domain/{gsub("weblogic.policy|security","",$2);print $2}|sort 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top