Linux

帶有使用者輸入的源腳本

  • September 14, 2022

我有一個類似的腳本

#!/bin/bash
echo -n "User: "
read -e username
echo -n "Password: "
read -es password

export http_proxy="http://$username:$password@localhost:40080"
export https_proxy="http://$username:$password@localhost:40080"

$@

unset http_proxy
unset https_proxy

它讀取使用者/密碼,導出代理,執行我需要代理的命令然後清理它。有用。但我試著做這個:

#!/bin/bash
echo -n "User: "
read -e username
echo -n "Password: "
read -es password

export http_proxy="http://$username:$password@localhost:40080"
export https_proxy="http://$username:$password@localhost:40080"

所以我可以source proxyscript(並且能夠在整個會話中使用代理,而無需每次都輸入使用者/密碼),它等待輸入,但導出http://:@localhost:40080


那麼,我做錯了什麼或者我怎樣才能讓它工作?

(我知道我可以將其設置為 args 並使用$1/$2或類似的東西,但我想避免在歷史記錄中打開密碼)


編輯/解決方案:

在答案的基礎上,一個小改動就足以使其與bash和兼容zsh

#!/bin/bash
echo -n "User: "
read username
echo -n "Password: "
read -s password

export http_proxy="http://$username:$password@localhost:40080"
export https_proxy="http://$username:$password@localhost:40080"

基本上,只是刪除了e標誌。

我不太明白為什麼它不起作用,它對我來說很好:

$ source foo.sh
User: terdon
Password: ~ $   ## I entered the password here, you can add an echo to clear the line

$ echo "$http_proxy"
http://terdon:myPass@localhost:40080
$ echo "$https_proxy" 
http://terdon:myPass@localhost:40080

我會使用read -p而不是echo, 並添加一個空echo來清除該行,但除此之外,您的方法應該有效:

#!/bin/bash
read -p "User: " -e username
read -p "Password: " -es password
echo ""

export http_proxy="http://$username:$password@localhost:40080"
export https_proxy="http://$username:$password@localhost:40080"

您現在可以這樣做. foo.sh(或者source foo.sh因為您使用的是 bash)並且它應該可以按預期工作。

引用自:https://unix.stackexchange.com/questions/717262