Что делает 'script / dev / null'?

21

Каждый раз, когда я вхожу в виртуальную машину с правами root, suв учетную запись пользователя и пытаюсь использовать screenее, выдается ошибка:

Cannot open your terminal '/dev/pts/0' - please check.

В сообщении о переполнении стека говорится, что мне нужно использовать его script /dev/nullдля исправления, и это работает, но все равно не объясняет, почему мне нужно печатать script /dev/null. Я хотел бы понять, что он делает и почему мне нужно его напечатать.

CJL
источник
2
> В сообщении о переполнении стека сказано: может быть полезно добавить ссылку на это сообщение, возможно, в комментарии.
törzsmókus
Это мог быть , например, stackoverflow.com/a/44244425/340790 .
JdeBP

Ответы:

27

Вы не можете открыть, /dev/pts/0потому что он принадлежит пользователю root, и после того, как вы перешли к другому пользователю, вы больше не можете открыть его по его пути, но вы все равно можете использовать его через открытый дескриптор, который был унаследован. из родительского процесса.

script /dev/null создаст другой pty, принадлежащий текущему пользователю.

В любом случае, эта ошибка / ограничение, кажется, была исправлена ​​в последних версиях screen(например, 4.99.0), которые будут правильно отправлять дескриптор на текущий терминал через SCM_RIGHTSвспомогательное сообщение на сокете домена unix, вместо того, чтобы отправлять только имя терминал и screenсервер попытаться открыть его (и потерпеть неудачу). То же самое с tmux.

mosvy
источник