Agradecemos tu apoyo para compartir nuestras crónicas acerca de las ciencias de la computación.
Solución:
Los diferentes emuladores tienen diferentes capacidades y protocolos para la función de mantener abierto. Algunos simplemente no pueden o no pueden hacer esto. Otros requieren que el script especifique que el emulador permanece abierto. Me encontré con esto al escribir un script simple para un programa llamado HDSentinel. Aquí están las diversas soluciones que puedo hacer:
KDE (emulador de Konsole)
konsole -hold -e sudo ./HDSentinel
(-hold
es el parámetro necesario)
Ilustración (emulador de terminología)
terminology --hold -e "sudo ./HDSentinel"
(--hold
es el parámetro necesario)
XFCE (emulador XFCE4)
xfce4-terminal -H -x "sudo ./HDSentinel"
(-H
es el parámetro necesario;)
EDITAR: -x se usa en lugar de -e en el terminal xfce
Mate (emulador de terminal mate)
mate-terminal --window-with-profile=HoldOpen -e "sudo ./HDSentinel"
(con este emulador primero debes crear un perfil personalizado para mantener el emulador abierto, llamé al mío HoldOpen, pero cualquier nombre servirá)
Gnome (emulador de terminal gnome)
gnome-terminal --window-with-profile=HoldOpen -e "sudo ./HDSentinel"
(funciona igual que Mate, crea un perfil para mantener abierto el emulador)
LXDE (lxterminal)
El lxterminal
El emulador que viene con LXDE no admite mantener el terminal abierto
Entonces, la conclusión es que algunos emuladores admitirán mantener abierto, y otros no. De los que lo hacen, la forma en que habilita esa función variará. Si está buscando un emulador que no figura aquí, tendrá que buscar en Google el emulador para averiguar si / cómo habilita mantener abierto.
Si el emulador que tiene no admite mantener abierto en absoluto, puede encontrar que su distribución incluye un emulador alternativo que sí lo admite (muchas distribuciones incluyen xterm, así como su emulador de versión de escritorio). Si no tiene un emulador que admita mantener abierto, siempre puede obtener uno del repositorio de software.
Esta información representa bastante tiempo de investigación, así que espero que esto ayude a la gente a ahorrar algo de tiempo y frustración. Por cierto, xterm también utiliza el -hold
parámetro, así que creo que ;bash
servirá para mantener abierto un emulador que ofrece un parámetro para la función de mantener abierto. Pero que no creará una función de retención abierta si el emulador no admite esto (como en el caso de lxterminal) o habilita la retención abierta si ese emulador usa un perfil personalizado para habilitar la retención abierta (como en el caso de Gnome).
El problema esencial es que los terminales basados en VTE no manejan la línea de comandos en el mismo camino como xterm. Eso está al lado de los posibles problemas con la opción de espera (innecesaria en esta discusión).
Las comillas en este comando
xterm -e "sudo pacman -Syu;bash"
son el problema. Que citó string es un solo token, pasado a xterm como un solo parámetro.
Con xterm, los tokens después -e
se prueban primero como parámetros para una llamada execv. Si falla, intenta algo como "$SHELL:-sh" -c "parameters"
(ejecuta su shell preferido para interpretar parameters
como una línea de comando). konsole hace uno u otro (probablemente el primero, ya que ese era el comportamiento original de xterm, y la mayor parte del diseño de konsole data de finales de la década de 1990). Cuando se modificó xterm para luit, la alternativa “fallar eso” ayudó a pasar parámetros a luit.
Los terminales basados en VTE durante un tiempo intentaron hacer un aspecto en una opción de línea de comandos y el otro en otra opción (según recuerdo, -e
y -x
, pero permutar los roles de las dos opciones y el tema de un interesante informe de error de Debian que no veo en este momento). En la versión actual, intentando
gnome-terminal -e "sudo pacman -Syu;bash"
falla porque solo funciona con el comportamiento de xterm original. Y (teniendo en cuenta que los otros terminales usan versiones algo más antiguas de VTE), ya que los desarrolladores de gnome-terminal (que se superponen con los desarrolladores de VTE …) descartaron el -x
opción hace un tiempo, esa opción no está disponible para el comando. Esta funciona porque sigue el modelo xterm original:
gnome-terminal -e "bash -c "sudo pacman -Syu;bash""
El -e
La opción se aborda en parte en Debian mediante un script de shell, que intenta proporcionar un conjunto mínimo de opciones (incluida una para el título). La política de Debian para esto se basó en xterm a finales de la década de 1990 y ha sido un tema de discusión más de una vez.
Otras lecturas:
- Debian # 648271: 11.8.3 “Paquetes que proporcionan un emulador de terminal” dice xterm pasa la opción -e directamente al exec
- Debian # 275409: -T no funciona con el proveedor de emulador de terminal x
- Gnome # 701691: -e acepta solo un término; todos los demás emuladores de terminal aceptan más de un término
Si te mola la idea, puedes dejar un escrito acerca de qué le añadirías a esta sección.