簡體   English   中英

如何將bash的值傳遞給Expect?

[英]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.

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