Linux
帶有使用者輸入的源腳本
我有一個類似的腳本
#!/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)並且它應該可以按預期工作。