別のユーザーとしてコマンドを実行し、標準入力に書き込み、標準出力から読み取る必要があります。新しいシェルを開く必要がある場合は、他のユーザーとしてのみコマンドを実行できます。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"