为什么将“脚本”重定向到/ dev / null /允许“屏幕”在被另一个用户使用时工作?


36

我被吸引到一个用户中以运行特定的长时间运行的脚本。我想使用屏幕,但收到错误消息“无法打开终端'/ dev / pts / 4'-请检查。”

因此,我在Google上四处搜寻,并遇到了一条指示运行的论坛帖子$ script '/dev/null/'。我这样做了,然后我可以进行筛选。

为什么这样做?su在该屏幕上无法作为被su用户运行吗?为什么将'script'重定向到/ dev / null可以避免这种情况呢?是否使用脚本以原始用户身份将日志写入某处?


2
清洁程序将su在屏幕会话中运行。
justarobert 2011年

@justarobert如果您希望多个用户能够连接到服务/批处理脚本运行帐户的同一屏幕,则不是。
Ashley

Answers:


40

好吧,从技术上讲,您不在此处重定向任何内容。

调用script /dev/null将使script整个打字稿保存起来/dev/null,实际上这意味着丢弃内容。

有关man script详细信息,请参见和实现的util-linux-ng软件包(misc-utils/script.c)。

screen实际上与无关。调用此功能的原因script有一个副作用,即在为您创建了一个伪终端/dev/pts/X。这样,您不必自己做,屏幕也不会出现权限问题-如果您是su从用户A到用户B的用户,则直接调用即可screen尝试抢占用户A的伪终端。除非您是root,否则这不会成功。这就是为什么您看到错误消息的原因。


6

为了直接输出到终端窗口,正在运行的程序必须能够写入控制终端。如果您使用的是xterm或ssh或其他虚拟连接(与真实的实时直接连接的终端相反),则您的控制终端是伪tty(pty)。

您的pty设置为只有您登录时才具有写权限,否则其他用户可能会在您的显示器上涂鸦(或阅读)。因此,当您向另一个用户(该用户不是root用户)求助时,该用户无权访问基础pty。

但是,更复杂的I / O(例如屏幕)需要直接访问pty才能工作,这就是控制整个屏幕的魔力。那就是当您遇到运行命令的人无法正确访问控制终端的问题时。

将脚本重定向到/ dev / null会导致屏幕不尝试写入控制终端,因此不会遇到权限问题。


2
那么,如果转到/ dev / null,如何查看屏幕写的内容呢?我敢肯定我误解了,它并没有真正进入/ dev / null,但是它在哪里呢?
user63623

“ it”(表示屏幕输出)不会转到/dev/null。第一:脚本记录会话(参见手册页),而你不都需要它:所以去到/ dev / null的。但是它没有副作用:它可以创建伪终端,现在您正在使用它,并且屏幕可以写入该伪终端。请参阅@ karol-piczak的答案。
Nanne
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.