Sed ne fonctionne pas à attendre
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
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