Abrir una Terminal para el script bash actual, si no se inició en uno

2

¿Cómo puedo hacer que un script se reinicie en una ventana de Terminal si no se inició en una?

En base a esta pregunta , he intentado, en un archivo llamado testtermejecutable marcado:

#! /bin/sh
if [ -t 0 ];  # stdin
then
    echo "yay! terminal!"
else
    Terminal sh ~/Desktop/testterm
fi

... pero Haiku se Terminalabre y nunca muestra nada, o a veces se abre y desaparece de inmediato.

Desde la Terminal, si escribo Terminal sh ~/Desktop/testterm, funciona una vez, abriendo una Terminal con "yay! Terminal!" en él, pero luego los intentos posteriores producen terminales vacías.

Kev
fuente
1
No llame a su archivo testya que probablemente esté llamando al sistema /usr/bin/test.
slhck
Gracias, no había pensado en eso. Editado la pregunta. (Todavía no funciona, pero al menos sé que no es debido a un conflicto de nombres esta vez.)
Kev
1
¿Funciona la prueba? Reemplace Terminalcon otro comando, ¿se ejecuta correctamente?
terdon
1
Realmente no sé mucho sobre Haiku, pero esto es lo que intentaría: 1. Quitar el espacio entre el shebang y /bin/sh. 2. Utilice una ruta relativa o absoluta para testterm. 3. Intente ejecutar Terminal testterm &desde una terminal. Todos los emuladores de terminal con los que he trabajado requieren un interruptor antes del ejecutable (por ejemplo, xterm -e ./testterm).
Dennis
1
Suponiendo que Terminalfuncione así xterm, el archivo que está buscando es el shell que debe ejecutar. Si es así, puedo pensar en una solución alternativa. Intenta correr Terminal sh, ¿se usa en shlugar de bash?
terdon

Respuestas:

1

Un truco que podrías probar es el siguiente:

  1. Cree un basharchivo .rc especial que genere su bashrcy ejecute su script. Vamos a llamarlo~/foo.rc

    $ cat ~/foo.rc
    #!/bin/sh
    ~/Desktop/testterm
  2. Crear un nuevo "cáscara" que llama bashcon ~/foo.rccomo su archivo .rc. Guarde este script como fake_shellen algún lugar de su $PATH(por ejemplo, ~/config/bin) y hágalo ejecutable:

  3. Ahora, en su testtermsecuencia de comandos, inicie Terminalusando fake_shellcomo shell.

El guión se convierte en:

#!/bin/sh
if [ ! -t 0 ];  # stdin
then
    TIMESTAMP=`date +%Y%m%d%H%M`
    echo "#!/bin/sh
    source /boot/common/etc/profile
    $0" > ~/temp_term$TIMESTAMP.rc
    echo "#!/bin/sh
    bash --rcfile ~/temp_term$TIMESTAMP.rc" > ~/config/bin/temp_shell$TIMESTAMP
    chmod a+x ~/config/bin/temp_shell$TIMESTAMP
    Terminal temp_shell$TIMESTAMP
    rm -f ~/config/bin/temp_shell$TIMESTAMP
    rm -f ~/temp_term$TIMESTAMP.rc
fi

echo "yay! terminal!"
# your script here
exit
terdon
fuente
@Kev, mira mi respuesta actualizada para un truco que puedes probar.
terdon
¡Increíble! 99% del camino, que es todo lo que necesito. Un par de cosas, el símbolo en la nueva ventana es bash-4.0#en lugar de />(no importa) y al momento de cerrar la ventana, se dice, The process "bash" is still running. If you close the Terminal, the process will be killed. (Terminales normalmente solo cerca Además, no es un gran problema..)
Kev
@Kev, la solicitud se puede cambiar configurando la PS1variable foo.rc, la razón por la que es diferente es porque /etc/bash.bashrcno se lee, por lo que también puede solucionar esto al obtenerla foo.rc. En cuanto al error, es porque está iniciando explícitamente /bin/bash. Intenta iniciar en segundo plano ( &aunque dudo que funcione).
terdon
Esto &hace que la Terminal vuelva a aparecer en blanco, aunque esa es la sintaxis correcta para los comandos asíncronos en Haiku. Gracias por la pista de PS1, lo buscaré. Por cierto, no sé por qué mi edición salió en busca gracioso ...
Kev