Sadrul no #screen (Freenode) deu esta resposta e funcionou:
com os comandos -X, tente especificar o número da janela também (por exemplo, tela -p0 -X ...)
Eu tenho um script em lote que inicia um aplicativo do servidor java dentro de uma tela. O comando é assim:
cd /dir/ && screen -A -m -d -S javascreen java -Xms640M -Xmx1024M -jar javaserverapp.jar nogui
Depois de executar o script em lote, ele inicia o servidor e o coloca dentro da tela correta. Se eu listar minhas telas depois, vejo algo assim:
user@gtwy /dir $ screen -list
There is a screen on:
16180.javascreen (Detached)
1 Socket in /var/run/screen/S-user.
No entanto, tenho um segundo script em lote que envia comandos automatizados para esse servidor e é executado em um intervalo de crontab diferente. Por causa da maneira como o aplicativo funciona, eu envio comandos para ele assim (este comando diz para alertar os usuários conectados "testando 123"):
screen -X exec .\!\! echo say testing 123
Eu também tentei:
screen -R -X exec .\!\! echo say testing 123
screen -S javascreen -X exec .\!\! echo say testing 123
Infelizmente, esses comandos NÃO FUNCIONAM. Eles nem sequer me dão uma mensagem de erro, eles simplesmente não fazem nada.
No entanto, se eu anexar manualmente à tela primeiro (com o comando abaixo) e, em seguida, desanexar, agora eu posso executar qualquer um dos comandos acima na perfeição. Eu posso demonstrar isso com um vídeo, se eu não estivesse claro o suficiente aqui.screen -r -d
Obrigado antecipadamente.
Atualização: aqui estão as partes importantes de / etc / screenrc. Deve ser totalmente baunilha, nunca editei este arquivo.
# VARIABLES
# ===============================================================
# No annoying audible bell, using "visual bell"
# vbell on # default: off
# vbell_msg " -- Bell,Bell!! -- " # default: "Wuff,Wuff!!"
# Automatically detach on hangup.
autodetach on # default: on
# Don't display the copyright page
startup_message off # default: on
# Uses nethack-style messages
# nethack on # default: off
# Affects the copying of text regions
crlf off # default: off
# Enable/disable multiuser mode. Standard screen operation is singleuser.
# In multiuser mode the commands acladd, aclchg, aclgrp and acldel can be used
# to enable (and disable) other user accessing this screen session.
# Requires suid-root.
multiuser off
# Change default scrollback value for new windows
defscrollback 1000 # default: 100
# Define the time that all windows monitored for silence should
# wait before displaying a message. Default 30 seconds.
silencewait 15 # default: 30
# bufferfile: The file to use for commands
# "readbuf" ('<') and "writebuf" ('>'):
bufferfile $HOME/.screen_exchange
#
# hardcopydir: The directory which contains all hardcopies.
# hardcopydir ~/.hardcopy
# hardcopydir ~/.screen
#
# shell: Default process started in screen's windows.
# Makes it possible to use a different shell inside screen
# than is set as the default login shell.
# If begins with a '-' character, the shell will be started as a login shell.
# shell zsh
# shell bash
# shell ksh
shell -$SHELL
# shellaka '> |tcsh'
# shelltitle '$ |bash'
# emulate .logout message
pow_detach_msg "Screen session of \$LOGNAME \$:cr:\$:nl:ended."
# caption always " %w --- %c:%s"
# caption always "%3n %t%? @%u%?%? [%h]%?%=%c"
# advertise hardstatus support to $TERMCAP
# termcapinfo * '' 'hs:ts=\E_:fs=\E\:ds=\E_\E\'
# set every new windows hardstatus line to somenthing descriptive
# defhstatus "screen: ^En (^Et)"
# don't kill window after the process died
# zombie "^["