Pergunta

Fiz esta liner bash que eu uso para listar instâncias do WebLogic, juntamente com seus caminhos completos. Isso funciona bem quando o corro do 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

Eu tentei incorporar isso em um script de espera

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"

Mas recebi este erro sed: -e expressão nº 1, char 13: opção desconhecida para `s '

Por favor ajude

Foi útil?

Solução

Sem uma contagem ou teste cuidadoso, eu tentaria adicionar outro \ depois de "segurança ", ou possivelmente excluindo o existente.

Além disso, você pode combinar os dois seds em um: sed -e 's/weblogic.policy//' -e 's/security\///'

Outras dicas

Provavelmente o \ personagem em

sed 's/security\///'

precisa de uma fuga extra no contexto esperado, por exemplo

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"

Use o operador {} do TCL em vez de cotações duplas em torno da string que você deseja enviar. A sintaxe {} no TCL é equivalente à citação única em Bash, que significa "string literal, não interprete seu conteúdo".

Dentro do {} Coloque exatamente o que você deseja TCL/Espere enviar para o subprocesso, personagem para o personagem, não é necessária citação extra.

Eu acho que isso é muito complexo para enviar para um host remoto. Em vez disso, coloque os comandos em um pequeno script de shell e execute isso. Dessa forma, você não terá problemas por causa das regras de expansão de cotação, escapando, etc.

Além disso, você deve usar ssh ao invés de expect Para executar scripts. expect é para executar comandos interativos como ftp que não têm habilidades de script adequadas.

Você pode tentar remover as cotações únicas e executar o comando novamente.

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

É provavelmente citando questões. Se não estiver bem, tente a sugestão de hlovdal

Enquanto isso, alguns de seus comandos longos podem ser combinados

/usr/ucb/ps auwwx |grep weblogic| tr ' ' '\n'|awk '/security.policy/&&/domain/{gsub("weblogic.policy|security","",$2);print $2}|sort 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top