스크립트에서 콘솔 입력을 읽는 명령에 쉘 변수를 어떻게 전달합니까?

스크립트에서 콘솔 입력을 읽는 명령에 쉘 변수를 어떻게 전달합니까?

사용자에게 프롬프트에 일부 데이터를 입력하도록 요청하는 명령을 사용하는 스크립트를 만들려고 합니다.

스크립트에 포함시키고 싶다고 가정해 보겠습니다 git push. (이것이 최선의 방법은 아니라는 것을 알고 있지만 이런 식으로 묻는 것이 무엇인지 모두가 이해할 것입니다.)

git push따라서 콘솔에서 사용할 때 사용자 이름과 비밀번호를 묻습니다. git쉘 스크립트에서 호출할 때 이를 전달하고 둘 다 쉘 변수로 저장하려면 어떻게 해야 합니까?

그것은 다음과 같이 보일 것입니다

#!/bin/bash

git push
$user
$password

답변1

가장 쉬운 방법은 외부 명령으로 파이프하는 것 같습니다.

printf "%s\n%s\n" "$user" "$password" |command_expects_username_and_password

$user$password그러면 및 뒤에 개행 문자가 오는 내용이 출력되고 출력이 stdin외부 프로세스로 리디렉션됩니다. 이 프로세스는 대화형으로 호출할 경우 사용자가 해당 순서대로 사용자 이름과 비밀번호를 입력해야 합니다.

좀 더 복잡한 작업을 수행하고 싶다면 다음을 살펴보는 것이 좋습니다.스크립트.

노트Kusalananda가 말했듯 stdin이 이는 프로그램이 단말 장치에서 직접이 아닌 이 정보를 읽는 경우에만 작동하며(그러나 이는 인증 정보를 요청할 때 일반적인 것 같습니다) 실제로 적용할 때는 작동하지 않습니다 git(귀하가 다음과 같이 제공했습니다). 사용 예).

답변2

당신이 찾고 있는 도구는 입니다 expect.

https://linux.die.net/man/1/expect

TTY와 자동으로 상호작용하는 도구입니다.

안전하지 않다는 점을 명심하세요. 비밀번호 없이 github에 푸시하려면 ssh를 사용해야 합니다.

git remote add origin [email protected]:name/repo

원격 "소스"가 이미 저장소에 있을 수도 있습니다.

https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/connecting-to-github-with-ssh

SSH 공개 및 개인 키를 설정하고 이를 SSH 에이전트에 추가한 후에는 푸시 또는 풀을 위해 비밀번호를 입력할 필요가 없습니다.

관련 정보