Costumo usar tee /proc/self/fd/2
para mostrar algo para stdout e stderr, capturar stdout, enquanto ainda mantenho toda a saída para stderr.
Por exemplo, eu tenho um do.sh
:
STD_OUT_STR=$(CMD ARGS ... 2>&1 | tee /proc/self/fd/2)
# handle STD_OUT_STR ...
...
Isso funciona muito bem.
por exemplo,
./do.sh
que funciona basicamente assim:
bash -c 'echo hi | tee /proc/self/fd/2'
saídas
hi
hi
No entanto, um dia eu o executo sudo -u A_USER ./do.sh
, ele falha.
sudo -u A_USER ./do.sh'
que basicamente executa:
sudo -u A_USER bash -c 'echo hi | tee /proc/self/fd/2'
saídas
tee: /proc/self/fd/2: Permission denied
hi
Até agora, tenho que seguir a solução alternativa:
sudo -u A_USER bash -c 'echo hi | tee >(cat >&2)'
Entendo que isso é por motivos de segurança: não compartilhe o pty do usuário atual com outros usuários.
Gostaria de saber se existe alguma opção de sudo -u A_USER
deixar o processo acessar seu pty?
EDIT: Preciso colocar o tee /proc/self/fd/2
ou mais em um script digamos do.sh, ou seja, não posso colocar tee /proc/self/fd/2
fora do do.sh, então sudo -u A_USER bash -c '...' | tee ...
não será útil para mim.