Domanda

Ho fatto questo bash one-liner, che io uso per elenco Weblogic istanze in esecuzione, insieme con i loro percorsi.Questo funziona bene quando ho eseguito dalla 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

Ho provato ad inserire questo in uno 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"

ma ho ottenuto questo errore sed:-e l'espressione #1, char 13:opzione sconosciuta `s'

Si prega di aiutare

È stato utile?

Soluzione

Senza un attento conteggio o test, mi piacerebbe provare ad aggiungere un altro \ dopo la "sicurezza\", o, eventualmente, con l'eliminazione di quella esistente.

Inoltre, è possibile combinare i due sed in uno: sed -e 's/weblogic.policy//' -e 's/security\///'

Altri suggerimenti

Probabilmente il \ carattere

sed 's/security\///'

ha bisogno di un extra di fuga in si aspettano contesto, ad esempio,

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"

L'uso di Tcl operatore {} invece di virgolette per racchiudere la stringa che si desidera inviare.Il {} sintassi in Tcl è equivalente alla singola offerta in bash, che significa "stringa letterale, non interpretare il contenuto".

All'interno di {} mettere esattamente ciò che si vuole Tcl/Aspettare di inviare al sottoprocesso, carattere per carattere, senza alcun citando richiesto.

Penso che questo è troppo complesso per inviare oltre a un host remoto.Invece, mettere i comandi in un piccolo script di shell ed eseguire.In questo modo, non sarà possibile eseguire in difficoltà a causa delle quote di espansione regole, in fuga, etc.

Inoltre, si dovrebbe utilizzare ssh invece di expect per l'esecuzione di script. expect è per l'esecuzione di comandi interattivi come ftp che non hanno un'adeguata capacità di scripting.

puoi provare a rimuovere le virgolette ed eseguire nuovamente il comando.

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

Più probabilmente, citando problemi.Se non è ok, prova il suggerimento da hlovdal

nel frattempo, alcuni dei vostri lunga comandi possono essere combinati

/usr/ucb/ps auwwx |grep weblogic| tr ' ' '\n'|awk '/security.policy/&&/domain/{gsub("weblogic.policy|security","",$2);print $2}|sort 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top