Come cambia prompt di subshell


8

Sto cercando di creare un semplice script che, tra le altre cose, creerà una subshell:

#!/bin/sh

# setup

"${@:-$SHELL}"

# teardown

La domanda è: devo modificare il prompt predefinito, quindi ad esempio:

$ # shell predefinita
$ ./myscript
(myscript) $ # subshell
(myscript) $ exit
$

Ho provato a cambiare PROMPTe PS1, ma nessuno di questi funziona. Come lo posso fare?

PS .: Ho bisogno di una soluzione che funzioni sia su Bash che su ZSH, se possibile.



Duplicazione non esatta come l'altra domanda era bashsolo per .
Stéphane Chazelas,

Sembra il giusto duplicato ;-(
margherita

Risposte:


7

Penso che puoi creare una subshell con un prompt diverso come questo:

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

Esempio

Env attuale:

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

In sub shell:

subshell prompt$ echo hi
hi
subshell prompt$ exit
exit

Torna alla shell originale:

$ 

1
È possibile utilizzare una here stringsostituzione al posto del processo. es <<< "PS1...".
Giordania,

1
@jordanm - puoi fornire un esempio? Ho fatto un casino con questo, ma non ho potuto ottenere un esempio funzionante usando le stringhe qui.
slm

2

Il motivo per cui non funziona potrebbe essere perché quando si carica il guscio (che dovrebbe essere ad es .: /bin/bash), finirà per ricaricare i file di configurazione, che includono le variabili di ambiente per la richiesta (ad es .: $HOME/.bashrc) dopo essere passati alla variabili d'ambiente che vuoi - quindi le tue variabili vengono scartate.

È possibile che si desideri verificare le opzioni della shell per caricare i file di configurazione personalizzati (ad es .: --rcfilein Bash IINM) e utilizzarli nonché \envper passare le variabili di ambiente desiderate. Il problema è che una volta che lo fai, l'attivazione della subshell diventa dipendente dalla shell.

( CAVEAT EMPTOR : Non considero ancora questa una risposta - in particolare, non ho ancora provato nulla di tutto questo nel mio sistema.)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.