Nomes de sessão de tela válidos

4

Com a tela GNU (versão 4), por que o seguinte é executado perfeitamente:

$ screen -S some-name

Mas se eu tentar usar uma barra ( / ) no nome da sessão, isso me dará um erro sobre o suporte multiusuário.

$ screen -S some/name
Must run suid root for multiuser support.

Se eu tentar definir o nome da sessão na tela:

$ screen
C-a :sessionname some/name

Eu recebo o seguinte erro:

: bad session name 'some/name'

Portanto, aparentemente, um caractere / é inválido para um nome de sessão. Olhando para a página do manual para a tela , não vejo nada sobre caracteres inválidos ou reservados para sessionname :

‘-S sessionname’

Set the name of the new session to sessionname. This option can be used to specify a meaningful name for the session in place of the default tty.host suffix. This name identifies the session for the screen -list and screen -r commands. This option is equivalent to the sessionname command (see Session Name).

8.5 Session Name — Command: sessionname [name]

(none) Rename the current session. Note that for screen -list the name shows up with the process-id prepended. If the argument name is omitted, the name of this session is displayed. Caution: The $STY environment variable still reflects the old name. This may result in confusion. The default is constructed from the tty and host names.

Além disso, ' e " não correspondidos no nome da sessão reclamam de citações não correspondentes que parecem ser sobre a sintaxe. Por exemplo, :sessionname 'test"' fornece test" como o nome. E ^A , ^B , etc. geram caracteres de controle.

Qual é a sintaxe ou caracteres válidos para um nome de sessão?

    
por cpburnz 12.08.2014 / 21:25

1 resposta

5

A finalidade de atribuir um nome a uma sessão de tela com -S é para que você possa operar nessa sessão (por exemplo, com screen -r ... ), especificando seu nome.

Olhando para a página man sob a opção -r :

-r [pid.tty.host]
-r sessionowner/[pid.tty.host]
resumes a detached screen session. No other options (except com‐ binations with -d/-D) may be specified, though an optional prefix of [pid.]tty.host may be needed to distinguish between multiple detached screen sessions. The second form is used to connect to another user's screen session which runs in multiuser mode. This indicates that screen should look for sessions in another user's directory. This requires setuid-root.

Portanto, um nome de sessão com um caractere / é interpretado como owner/name . (Isso pode ser documentado melhor com a opção -S ).

Você pode fazer

screen -S $USER/name

que é equivalente a:

screen -S name

Em alguns experimentos rápidos com a versão de tela 4.01.00, não encontrei nenhum outro caractere especial proibido nos nomes de sessão. Todos os itens a seguir:

screen -S 'foo bar'
screen -S 'foo"bar'
screen -S "foo'bar"
screen -S 'foo\bar'
screen -S "foo'bar^Xbaz"

funcionou corretamente para mim.

No último, o ^X era na verdade um caractere literal Ctrl-X . screen -ls mostra isso literalmente; Eu tive que fazer screen -ls | cat -A para ver isso. Consegui retomar todas essas sessões especificando seus nomes:

screen -dr 'foo bar'

, etc, e o valor de $STY em cada sessão estava correto.

(Eu não recomendo usar caracteres de controle, pois espero que sejam razões óbvias).

    
por 12.08.2014 / 22:16

Tags