사용자 입력이 포함된 소스 스크립트

사용자 입력이 포함된 소스 스크립트

나는 비슷한 스크립트를 가지고 있습니다

#!/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 -eZSH에서는 bash일부 readline 항목이지만 read -eZSH에서는 단지 에코일 뿐입니다. ZSH를 사용하여 코드를 셸 하려면 sourceZSH용 소스 코드를 작성해야 합니다.

관련 정보