簡體   English   中英

使用expect執行shell腳本時出錯

[英]Error using expect to execute shell script

我正在使用一個期望腳本來自動回答旨在將 Linux 系統添加到活動目錄的 shell 腳本中的提示。 我只有三個提示:位置,用戶名,密碼。 我正在使用 Ansible 來執行它。

腳本執行時的問題,它嘗試在 vm、adcli、realmd 等上安裝 ~ 49 rpms。Yum 開始安裝 rpms,但它從未完全完成。 有時,它會在 17、46 或 42 rpms 后停止。 它不會產生錯誤,但只是不一致地停止,並且 vm 顯然沒有加入 AD。

我知道我可以使用 Ansible 來編寫任務並回避使用 bash 腳本。 我的目標是至少暫時使用另一位同事的工作並在以后生成 Ansible 游戲。

如果我在 Ansible Tower 之外使用腳本,它就可以正常工作。 shell 腳本中的所有函數都會按預期執行並安裝 rpm。 這是我第一次嘗試使用 expect,所以我可能做錯了什么。 謝謝參觀。

  - name: Joining of system to the domain
    ansible.builtin.shell: |
      set timeout 10
      spawn sudo ./addto-AD
      match_max 100000

      expect -exact "Please Enter the Environment (i.e. Portand or Seattle): "
      send -- "Seattle\r"
      expect -exact "\r"

      expect -exact "Enter Elevated AD Username: "
      send -- "{{ elevated }}\r"
      expect -exact "\r"

      expect -exact "Enter Password for User: "
      send -- "{{ elevated_pass }}\r"
      expect -exact "\r"
      
      expect eof

expect eof仍然受到超時的影響。 該腳本可能需要超過 10 秒才能完成。 我建議set timeout -1


顯然我不知道腳本在做什么,但也許你不需要對此期望:嘗試將響應發送到腳本的標准輸入

printf '%s\n' "Seattle" "{{ elevated }}" "{{ elevated_pass }}" | sudo ./addto-AD

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM