使用 sudo 和管道时的奇怪行为

使用 sudo 和管道时的奇怪行为

当我在两个管道命令中两次使用 sudo 时,我得到以下输出:

$ sudo echo 'hello world' | sudo cat
[sudo] password for zoey: [sudo] password for zoey: 

并且必须输入两次密码。第一次输入时,密码会像往常一样隐藏,但第二次输入时,密码会以明文形式显示。

$ sudo echo 'hello world' | sudo cat
[sudo] password for zoey: [sudo] password for zoey: 
password123456seven
hello world

命令退出后,我在命令行中输入的任何内容都会被隐藏,就像我在输入密码一样,尽管命令输出(大部分)工作正常。这种行为一直持续到我关闭终端。

我试过:

$ echo 'hello world' | sudo cat
$ sudo echo 'hello world' | cat

并且两者似乎都表现正常。

我不想使用$ sudo bash -c "echo \'hello world\' | cat",因为它看起来过于笨重,而且会使引用的文本处理起来很困难。

此外,在有人问之前,是的,我知道这一点,echo并且cat通常不需要 root 权限。

答案1

不确定这是否能让您感觉好一些,但您观察到的情况不会发生在 Ubuntu 16.04 中。它确实发生在 Ubuntu 15.10 中(我猜您使用的是这个版本...或者可能是更老的版本?)。

幸好我有一台16.04和一台15.10的机器可以试试,在16.04下只需要输入一次密码。

但不确定区别在哪里。我刚刚检查过,两者都使用相同版本的 bash (4.3.42)。我不认为我的 .bash* 文件中有任何设置会改变行为...

(也许您可以尝试使用 Ubuntu 16.04 启动盘来确认我所看到的内容?)

相关内容