스크립트에서 sudo su를 사용하여 명령을 실행하고 stdin 및 stdout을 리디렉션합니다.

스크립트에서 sudo su를 사용하여 명령을 실행하고 stdin 및 stdout을 리디렉션합니다.

다른 사용자로 명령을 실행하고 표준 입력에 쓰고 표준 출력에서 ​​읽어야 합니다. 새 쉘을 열어야 다른 사용자로서만 명령을 실행할 수 있습니다. sudo su anotheruser그러나 새로 열린 쉘에서는 호출자의 stdin 및 stdout이 손실됩니다. 나는 달리는 것이 허락되지 않는다sudo -u anotheruser -c command

stdin/stdout 리디렉션에 명명된 파이프를 사용할 수 있다는 것을 알고 다음과 같은 스크립트를 작성했습니다.

#!/usr/bin/env bash

mkfifo pipein
mkfifo pipeout

echo '/usr/lib/openssh/sftp-server 0<pipein >pipeout' | sudo su anotheruser

cat 0<&1 >pipein & cat <pipeout

wait

하지만 예상대로 작동하지 않습니다. 스크립트를 원래 명령으로 원활하게 사용할 수 있도록 스크립트의 표준 입력을 명령의 표준 입력으로, 명령의 표준 출력을 스크립트의 표준 출력으로 리디렉션하고 싶습니다.

답변1

귀하의 게시물에 일부 편집 오류가 있는 것 같습니다. sudo 줄에 "&"가 누락되어 있고 나중에 스크립트에서 파이프에 다른 이름을 사용합니다. 나에게 도움이 된 것은 다음과 같습니다.

#!/usr/bin/env bash
mkfifo pipein
mkfifo pipeout
echo '/usr/lib/openssh/sftp-server <pipein >pipeout' | sudo su anotheruser &
cat <pipeout &
cat >pipein
wait
rm -f pipein pipeout

답변2

귀하의 질문을 완전히 이해했는지 잘 모르겠지만 다음과 같은 내용을 찾고 계신 것 같습니다.

sudo -u $USER sh -c "ls -la /home" | grep $USER

또는 다른 사용자로 파이프를 원하는 경우

sudo -u $USER sh -c "ls -la /home | grep $USER"

관련 정보