我经常用来tee /proc/self/fd/2
向 stdout 和 stderr 显示一些内容,捕获 stdout,同时仍将所有输出保留到 stderr。
例如,我有一个do.sh
:
STD_OUT_STR=$(CMD ARGS ... 2>&1 | tee /proc/self/fd/2)
# handle STD_OUT_STR ...
...
这效果非常好。
例如,
./do.sh
基本上是这样运行的:
bash -c 'echo hi | tee /proc/self/fd/2'
输出
hi
hi
然而,有一天我在 下运行它sudo -u A_USER ./do.sh
,它失败了。
sudo -u A_USER ./do.sh'
其本质上是运行:
sudo -u A_USER bash -c 'echo hi | tee /proc/self/fd/2'
输出
tee: /proc/self/fd/2: Permission denied
hi
到目前为止,我必须遵循以下解决方法:
sudo -u A_USER bash -c 'echo hi | tee >(cat >&2)'
我知道这是出于安全原因:不与其他用户共享当前用户的 pty。
我想知道是否有任何选项可以sudo -u A_USER
让进程访问其 pty?
编辑:我需要将其放入tee /proc/self/fd/2
do.sh 脚本中,即我不能将其放在tee /proc/self/fd/2
do.sh 之外,所以sudo -u A_USER bash -c '...' | tee ...
对我没有帮助。