Вопрос

Я создал однострочный файл bash, который использую для перечисления запущенных экземпляров Weblogic вместе с их полными путями. Это хорошо работает, когда я запускаю его из оболочки.

/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

Я попытался включить это в сценарий ожидания

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"

но я получил эту ошибку:-e выражение №1, символ 13:неизвестная опция для `s'

Пожалуйста помоги

Это было полезно?

Решение

Без тщательного подсчета и тестирования я бы попробовал добавить еще \ после «безопасности» или, возможно, удаления существующего.

Также вы можете объединить два sed в один: sed -e 's/weblogic.policy//' -e 's/security\///'

Другие советы

Вероятно, \ персонаж в

sed 's/security\///'

требуется дополнительный экран в ожидаемом контексте, например.

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"

Используйте оператор {} Tcl вместо двойных кавычек вокруг строки, которую вы хотите отправить.Синтаксис {} в Tcl эквивалентен одинарной кавычке в bash, что означает «литеральную строку, не интерпретируйте ее содержимое».

Внутри {} поместите именно то, что вы хотите, чтобы Tcl/Expect отправил в подпроцесс, символ за символом, никаких дополнительных кавычек не требуется.

Я думаю, что это слишком сложно для отправки на удаленный хост.Вместо этого поместите команды в небольшой сценарий оболочки и выполните его.Таким образом, у вас не возникнут проблемы из-за правил расширения кавычек, экранирования и т. д.

Более того, вам следует использовать ssh вместо expect для запуска скриптов. expect предназначен для запуска интерактивных команд, таких как ftp которые не имеют подходящих навыков написания сценариев.

вы можете попробовать удалить одинарные кавычки и снова запустить команду.

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

Скорее всего, это проблемы с цитированием.Если это не нормально, попробуйте предложение от hlovdal

между тем, некоторые из ваших длинных команд можно объединить

/usr/ucb/ps auwwx |grep weblogic| tr ' ' '\n'|awk '/security.policy/&&/domain/{gsub("weblogic.policy|security","",$2);print $2}|sort 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top