su > echo "<username>" 是什么意思?

Sac*_*iya 17 command-line bash sudo

当我输入命令时

su > echo  "sachin"
Run Code Online (Sandbox Code Playgroud)

它要求输入密码。当我提供密码时,发生了一些奇怪的事情,如您所见:

在此处输入图片说明

还有一件事:我的笔记本电脑上还有另一个用户Hadoop,但是当我这样做时

su > echo "Hadoop"
Run Code Online (Sandbox Code Playgroud)

它说

没有 Hadoop 的密码条目

这是什么意思?

Rma*_*ano 30

啊! 不错的拼图!

只需说“ exit”,您的所有文件都会在那里(以及您在名为 的文件中遗漏的输出echo)。

解释:

 su > echo user 
Run Code Online (Sandbox Code Playgroud)

是相同的

 su user > echo
Run Code Online (Sandbox Code Playgroud)

因此,您正在使用su(切换用户)为您的用户启动(子)shell ,并将所有输出重定向到一个名为echo!

看:

[romano:~] % cd tmp/dvd-usa-hd 
[romano:~/tmp/dvd-usa-hd] % ls
dvd-usa-hd_01_01.avi
[romano:~/tmp/dvd-usa-hd] % su > echo romano
Password: 
[romano:~/tmp/dvd-usa-hd] % ls
[romano:~/tmp/dvd-usa-hd] % exit
[romano:~/tmp/dvd-usa-hd] % ls
dvd-usa-hd_01_01.avi  echo
[romano:~/tmp/dvd-usa-hd] % cat echo
dvd-usa-hd_01_01.avi
echo
[romano:~/tmp/dvd-usa-hd] % 
Run Code Online (Sandbox Code Playgroud)

  • 好答案。这个难题的关键令人困惑和有趣的方面是,虽然我们通常在一个简单命令的末尾(或有时是开头)提供它们,但重定向实际上可以去任何地方——甚至在参数之间。我们经常看到类似 `su user > echo` 和 `> echo su user` 之类的命令,但 `su > echo user` 几乎从来没有,因为很少有实际理由以如此令人困惑的方式编写命令. (不过,在从程序或脚本自动生成命令时,接受这种语法有时很有用。) (13认同)
  • @EliahKagan 是的 --- 文件名增强了这里的混乱。`su > stdout.txt 用户` 不会那么棘手... (2认同)