我有一个有趣的在我的大多数服务器上都存在一个问题,以另一个程序作为前缀sudo
并|
通过管道传输的命令最终会以缩进的输出结束。
请注意,我将使用lsb_release
命令作为示例,但是这个问题在任何情况下都会发生任何命令(例如读取日志/配置文件)。
以下是使用和不使用 sudo 的正常输出:
$ sudo lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.4 LTS
Release: 18.04
Codename: bionic
$ lsb_release -a | cat
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.4 LTS
Release: 18.04
Codename: bionic
合并后的输出如下须藤和一个管道:
$ sudo lsb_release -a | cat
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.4 LTS
Release: 18.04
Codename: bionic
有趣的是,这确实不是当我们以 root 用户身份运行命令时会发生这种情况。
$ sudo su
# lsb_release -a | cat
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.4 LTS
Release: 18.04
Codename: bionic
这些服务器上有多个用户,我们都遇到了这个问题。
有任何想法吗?
更新的示例:
不显示制表符/空格字符cat --show-all
:
$ sudo lsb_release -a | cat --show-all
No LSB modules are available.
Distributor ID:^IUbuntu$
Description:^IUbuntu 18.04.5 LTS$
Release:^I18.04$
Codename:^Ibionic$
输出有同样的问题od -bc
:
$ sudo lsb_release -a | od -bc
No LSB modules are available.
0000000 104 151 163 164 162 151 142 165 164 157 162 040 111 104 072 011
D i s t r i b u t o r I D : \t
0000020 125 142 165 156 164 165 012 104 145 163 143 162 151 160 164 151
U b u n t u \n D e s c r i p t i
0000040 157 156 072 011 125 142 165 156 164 165 040 061 070 056 060 064
o n : \t U b u n t u 1 8 . 0 4
0000060 056 065 040 114 124 123 012 122 145 154 145 141 163 145 072 011
. 5 L T S \n R e l e a s e : \t
0000100 061 070 056 060 064 012 103 157 144 145 156 141 155 145 072 011
1 8 . 0 4 \n C o d e n a m e : \t
0000120 142 151 157 156 151 143 012
b i o n i c \n
0000127
和$TERM
值:
$ echo $TERM
xterm-256color
答案1
看起来问题与Defaults use_pty
中的设置有关/etc/sudoers
,该设置是为了强化 CIS 而添加的。注释掉该行后,服务器不再存在缩进问题。
$ sudo lsb_release -a | cat
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.5 LTS
Release: 18.04
Codename: bionic
通读https://www.sudo.ws/legacy.html,我怀疑更新sudo
到较新的版本将解决该问题。
例如,这个改变看起来很有希望
1.8.27版本和1.8.26版本之间的主要变化:
[...]
如果配置了 I/O 日志插件但该插件实际上没有记录任何 I/O,则 sudo 将不再强制在伪 tty 中运行命令。