有人可以解释一下 at 和 tty 命令的这个属性吗?

有人可以解释一下 at 和 tty 命令的这个属性吗?

有人可以解释一下这个命令吗:

echo "/bin/sh <$(tty) >$(tty) 2>$(tty)" | sudo at now;tail -f /dev/null

启动 root shell,但是这个命令:

echo "/bin/sh" | sudo at now; tail -f /dev/null仅接受输入但不执行任何操作。

我确实明白它tail -f /dev/null与第二个命令具有相同的效果,但是什么因素使得第一个命令与第二个命令不同。

我曾经发布过类似的问题:“ /bin/sh <$(tty) >$(tty) 2>$(tty) ”是什么意思? 但这个问题主要集中在上述命令之间的区别上。提前致谢。

答案1

在我看来,它们都做同样的事情,除了如何处理输入和输出。

“at” 命令的一个特性是它在单独的 tty 中启动,您键入的 tty 的输入和输出将被忽略。添加重定向会强制 at 命令从指定的 tty 读取(通过重定向输入并重定向输出 stdout 和 stderr)。

进一步澄清

$(tty)

意思是“运行命令 tty 并使结果成为命令行的一部分”。tty 标识你的屏幕终端。

< $(tty) 

是一条指令,用于从任何设备 $(tty) 进行管道输入。同样

> $(tty) 2>($tty)

将 stderr(第一部分)和 stderr(2>)的结果输出到您当前的终端。

因此,即使异步启动,该命令也会与您的终端进行通信 - 假设 $(tty) 解析为您当前的终端。(您可以使用命令“echo tty”检查当前终端的值

相关内容