Cómo cambiar el aviso de subshell

8

Estoy tratando de crear un script simple que, entre otras cosas, creará una subshell:

#!/bin/sh

# setup

"${@:-$SHELL}"

# teardown

La pregunta es: necesito cambiar la solicitud predeterminada, por ejemplo:

$ # shell predeterminado
$ ./myscript
(myscript) $ # subshell
(myscript) $ salida
$

Traté de cambiar PROMPTy PS1, pero ninguno de estos funciona. ¿Cómo puedo hacer eso?

PD .: Necesito una solución que funcione tanto en Bash como en ZSH, si es posible.

Lucas Sampaio
fuente
No es un duplicado exacto ya que esa otra pregunta era bashsolo para .
Stéphane Chazelas
Parece el duplicado correcto ;-(
margarita

Respuestas:

7

Creo que puede crear una subshell con un mensaje diferente como este:

$ bash --rcfile <(echo "PS1='subshell prompt: '") -i

Ejemplo

Env actual:

$ bash --rcfile <(echo "PS1='subshell prompt$ '") -i

En sub shell:

subshell prompt$ echo hi
hi
subshell prompt$ exit
exit

Volver a la carcasa original:

$ 
slm
fuente
1
Puede usar una here stringsustitución en lugar del proceso. por ej <<< "PS1...".
jordanm
1
@jordanm: ¿puedes dar un ejemplo? Me metí con esto, pero no pude obtener un ejemplo de trabajo usando las cadenas aquí.
slm
2

La razón de que no funciona puede ser porque cuando se carga la cáscara (que debería ser, por ejemplo .: /bin/bash), que va a terminar la recarga de sus archivos de configuración, que incluyen las variables de entorno para el símbolo (por ejemplo .: $HOME/.bashrc) después de haber sido aprobado el variables de entorno que desee, por lo tanto, sus variables se descartan.

Es posible que desee verificar las opciones del shell para cargar archivos de configuración personalizados (por ejemplo: --rcfileen Bash IINM) y usarlos, así como también \envpara pasar las variables de entorno que desee. El problema es que una vez que lo haces, la subshell se vuelve dependiente de la shell.

( EMPRESOR DE CAVEAT : Todavía no considero que esto sea una respuesta, en particular, todavía no he probado nada de esto en mi sistema).

Luis Machuca
fuente