나는 비슷한 스크립트를 가지고 있습니다
#!/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
그렇다면 내가 뭘 잘못하고 있거나 어떻게 작동하게 할 수 있습니까?
(인수로 전달하고 $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
로고만 제거했습니다.
답변1
왜 작동하지 않는지 잘 모르겠습니다. 제게는 잘 작동합니다.
$ 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
하고 null을 추가하여 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
지금 (또는 bash를 사용하고 있기 때문에) 이 작업을 수행할 수 source foo.sh
있으며 예상대로 작동해야 합니다.
답변2
ZSH는 bash가 아닙니다. 쉘에 호환되지 않는 read
내장 기능이 있습니다. bash
:
-e 표준 입력이 터미널에서 오는 경우 readline(위의 READLINE 참조)을 사용하여 라인을 가져옵니다. Read-line은 현재(또는 행 편집이 이전에 활성화되지 않은 경우 기본값) 편집 설정을 사용하지만 Read-line의 기본 파일 이름 완성을 사용합니다.
중산:
-e -E 읽은 입력을 표준 출력으로 인쇄(에코)합니다. -e 플래그가 사용되면 입력이 인수에 지정되지 않습니다.
따라서 read -e
ZSH에서는 bash
일부 readline 항목이지만 read -e
ZSH에서는 단지 에코일 뿐입니다. ZSH를 사용하여 코드를 셸 하려면 source
ZSH용 소스 코드를 작성해야 합니다.