Intereting Posts
VBoxClient: не удалось подключиться к ядру VirtualBox tmux – Catch 22 с «неизвестным ключом: WheelUpPane» для osx и Ubuntu Создание ключа GnuPG для apache Тачпад Synaptics неактивен до приостановки, активен после возобновления Должен ли владелец зашифрованного каталога регистрироваться для его доступа к системе? Как создать и смонтировать loop-устройство с гостевой консолью? Отправка заданий с последовательным завершением Linux Mint: как избежать приостановки воспроизведения музыки Может ли интерактивная оболочка стать неинтерактивной или наоборот? Как разрешить прямой доступ root через SSH в определенном диапазоне IP? как устранить неполадки в имени домена перед повторным указателем Nameservers Как я могу убедиться, что grub установлен только один раз? Обзор результатов GREP и FIND в Xemacs Головоломка над судо и дорожками Предотвращение падения пакетов IPv6 Router Solisitation (Type 133)

Использование специального символа "и` в команде send в сценарии ожиданий

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

 send " chage -l root | grep -i "Password expires" | if [[ `awk -F : '{print $2}' ` = "never" ]] ; then echo "password needs to be changed " ;else echo "skipping reset " ; fi;\r" 

Я попытался использовать \ с двойными кавычками, но ошибка остается такой же

Если вам нужна строка без интерполяции в Tcl (используется язык ожидания), и у нее нет {} символов или переменных, которые вы хотите развернуть, затем заключите в {} . Например:

 send { chage -l root | grep -i "Password expires" | if [[ `awk -F : '{print $2}' ` = "never" ]] ; then echo "password needs to be changed " ;else echo "skipping reset " ; fi;} send \r 

Где вы положили назад косые черты? На всех цитатах или только на таких внутренних?

 send " chage -l root | grep -i \"Password expires\" | if [[ `awk -F : '{print \$2}' ` = \"never\" ]] ; then echo \"password needs to be changed \" ;else echo \"skipping reset \" ; fi;\r" 

И да, вам также нужен символ \ $ , потому что эта строка будет передана команде, и вам не понадобится bash чтобы решить ее слишком рано.