비밀번호를 "sudo"로 파이프하고 기타 데이터를 "sudo" 명령으로 파이프하십시오.

비밀번호를 "sudo"로 파이프하고 기타 데이터를 "sudo" 명령으로 파이프하십시오.

두 명령 모두 작동합니다. ( -Sin 은 sudosudo에게 stdin에서 비밀번호를 읽도록 지시합니다.)

echo 'mypassword' | sudo -S tee -a /etc/test.txt &> /dev/null
echo -e '\nsome\nmore\ntext' | sudo tee -a /etc/test.txt &> /dev/null

이제 두 가지를 결합하고 싶습니다. 즉, 모든 것을 한 줄에 구현하고 싶습니다. 하지만 물론 다음과 같은 것은 작동하지 않습니다.

echo -e '\nsome\nmore\ntext' | echo 'mypassword' | sudo -S tee -a /etc/test.txt &> /dev/null

무엇이 효과가 있을까요? 감사합니다 :) - 로드

추신: 관련 없는 작은 질문: 1> >과 동일합니까? 나는 그들이...

답변1

이렇게 하면 됩니다:

{ echo 'mypassword'; echo 'some text'; } | sudo -k -S tee -a /etc/test.txt &>/dev/null

요점은 동일한 표준 입력을 sudo사용하므로 tee둘 다 동일한 소스에서 읽힌다는 것입니다. 에 전달하려는 항목 앞에 "mypassword" + "\n"을 입력해야 합니다 tee.

명령을 설명하십시오.

  • 그룹 명령을 중괄호로 묶습니다. 우리는 그것을 {...}명령 이라고 생각할 수 있습니다 . 콘텐츠가 {...}파이프에 어떻게 기록되는지는 중요하지 않습니다.
  • echo 'mypassword'파이프에 "mypassword\n"을 씁니다. sudo나중에 읽을 내용 입니다 .
  • echo 'some text'파이프에 "일부 텍스트\n"을 씁니다. 이것이 tee궁극적으로 달성되는 것입니다.
  • sudo -k -S"\n"에 도달할 때까지 표준 입력(즉, 파이프)에서 비밀번호를 읽습니다. 따라서 "mypassword\n"은 여기에서 사용됩니다. 이 스위치는 암호를 묻는 메시지가 표시되고 사용자가 최근에 사용한 캐시된 자격 증명이 무시되도록 -k하기 위한 것입니다 .sudo
  • tee표준 입력에서 읽고 남은 부분인 "일부 텍스트\n"을 가져옵니다.

추신: I/O 리디렉션 정보: 예 1>filename, 맞습니다 >filename. 둘 다 stdout을 .파일 이름. 그리고 0<filename<filename모두 동일하며 둘 다 표준 입력을 리디렉션합니다.

답변2

조금 늦었지만 이것이 잘 작동하는 것으로 나타났습니다.

sudo -k && echo -e "password\ntext" | sudo -S tee file > /dev/null 2>&1

여러 파이프가 필요하지 않으며 이해하기 쉽습니다.

> /dev/null 2>&1

그러면 모든 출력(암호를 묻는 출력 포함)이 /dev/null로 리디렉션됩니다.

답변3

주석에 넣을 수는 없지만 이 -k옵션을 기존 명령과 함께 사용할 수 있습니다 sudo.

sudo -k && echo 'some text' | { echo 'mypassword'; cat -; } | sudo -S tee -a /etc/test.txt &>/dev/null

-k원본 에 직접 넣을 수도 있습니다 sudo. "더 안전"할 수도 있습니다.

echo 'some text' | { echo 'mypassword'; cat -; } | sudo -k -S tee -a /etc/test.txt &>/dev/null

관련 정보