Linux

期望腳本支持兩個預期字元

  • September 5, 2012

我想通過期望在 Linux 和 Solaris 機器上執行 sshd restart (我的期望在我的 ksh 腳本中執行)

我創建了期望腳本,所以當期望看到提示“#”然後他執行 sshd restart

但問題是我也在solars上執行這個expect並且提示是“>”所以如何創建一個支持“#”和“>”提示的expect行

在 Linux 上

   expect #                {send "/etc/init.d/sshd restart\r"}

太陽能

  expect >                {send "/etc/init.d/sshd restart\r"}

使用全域模式:expect {[#>]}

或正則表達式:expect -re {#|>}- 正則表達式模式可以變得更精細。我建議您將提示匹配錨定到行尾。提示通常以空格結尾,因此您可以:

expect -re {[#>] ?$}

您可以通過檢查 uname -s 的輸出或通過檢查以下輸出將其放入 if 語句中:

貓 /etc/release

貓 /etc/redhat-release

貓 /etc/lsb-release

並使用類似的東西:

if [[ $(uname -s) == "Linux" ]];then
  expect #  {send "/etc/init.d/sshd restart\r"}
else
  expect >  {send "/etc/init.d/sshd restart\r"}
fi

我已經好幾年沒有使用 ksh 了,如果語法錯誤,請見諒!

引用自:https://serverfault.com/questions/424466