我想自動安裝 Yocto 構建的 SDK。它提供了一個用于安裝的 shell 腳本,但 shell 腳本需要用戶輸入,我想自動化。我嘗試將以下內容添加到應該自動安裝 SDK 的現有 shell 腳本中:
...
echo "built SDK, install SDK"
/usr/bin/expect -c '
spawn /path/to/SDK/install/script.sh
expect "Enter target directory for SDK (default: /opt/poky/3.1.5): \r"
send -- "\r"
expect "You are about to install the SDK to "/opt/poky/3.1.5". Proceed [Y/n]? \r"
send -- "\r"
'
/bin/bash
但這是我在運行時得到的:
Poky (Yocto Project Reference Distro) SDK installer version 3.1.5
=================================================================
Enter target directory for SDK (default: /opt/poky/3.1.5): extra characters after close-quote
while executing
"expect "You are about to install the SDK to "/"
$
我不確定額外的字符錯誤來自哪里,有人可以幫忙嗎?
uj5u.com熱心網友回復:
您已將雙引號放在雙引號字串中:
expect "You are about to install the SDK to "/opt/poky/3.1.5". Proceed [Y/n]? \r"
# .....^....................................^...............^...................^
你需要逃離他們
expect "You are about to install the SDK to \"/opt/poky/3.1.5\". Proceed [Y/n]? \r"
# ..........................................^................^
此外,[braces]在 Tcl/expect 中是命令替換語法,所以一旦雙引號問題得到修復,您可能會看到invalid command name "Y/n"
正確的解決方案是使用 Tcl 的非插值參考機制:大括號
expect {You are about to install the SDK to "/opt/poky/3.1.5". Proceed [Y/n]? }
# .....^......................................................................^
Tcl 語法規則見http://www.tcl-lang.org/man/tcl8.6/TclCmd/Tcl.htm。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/483469.html
下一篇:這個腳本完成了它的作業
