[英]how to set bash variable in expect or return variable from expect to bash
[英]How to pass a value from bash into expect?
我有一個非常簡單的bash腳本,需要期望。 我需要將bash的值傳遞給Expect,並且我不嘗試ssh到另一台服務器或其他任何東西(因為我似乎只發現有關通過ssh登錄到另一台服務器的問題)。
這個想法就是這樣的:
#!/usr/bin/env bash
echo "Please enter your password: "
read PASSWD
x=$(expect -c '
spawn su -c 'whoami'
expect "Password:"
send "$PASSWD\r"
interact
')
所以這行不通。 Expect Shell無法識別$ PASSWD變量。 如何做到這一點?
謝謝。
shell不會擴展單引號內的變量,這就是為什么在這種情況下$PASSWD
仍然是文字字符串$PASSWD
。
嘗試更改引號:
#!/usr/bin/env bash
echo "Please enter your password: "
read PASSWD
x=$(expect -c "
spawn su -c 'whoami'
expect 'Password:'
send '$PASSWD\r'
interact
")
還有一點注意:您應該意識到這可能會帶來安全風險,因為在命令運行時,密碼將以純文本形式顯示在進程列表中。
另一個選擇是將PASSWD存儲在環境中,並期望在那里進行拾取:
read -p "Your password: " passwd
export passwd
expect -c '... ; send "$env(passwd)\r"; ...'
從安全角度考慮,最好的選擇是要求輸入密碼提示:這樣,密碼將不會在命令行或環境中顯示。
expect -c <<'END'
stty -echo
send_user "Your password: "
expect_user -re "(.*)\n"
send_user "\n"
set passwd $expect_out(1,string)
stty echo
# your script starts here
...
send "$passwd\r"
...
END
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.