Voglio eseguire una subshell bash, (1) eseguire alcuni comandi, (2) e quindi rimanere in quella subshell per fare come mi pare. Posso fare ognuno di questi singolarmente:
Esegui il comando utilizzando
-c
flag:$> bash -c "ls; pwd; <other commands...>"
tuttavia, ritorna immediatamente alla shell "super" dopo l'esecuzione dei comandi. Posso anche solo eseguire una subshell interattiva:
Inizia un nuovo
bash
processo:$> bash
e non uscirà dalla subshell fino a quando non lo dirò esplicitamente ... ma non posso eseguire alcun comando iniziale. La soluzione più vicina che ho trovato è:
$> bash -c "ls; pwd; <other commands>; exec bash"
che funziona, ma non nel modo in cui volevo, poiché esegue i comandi forniti in una subshell e quindi ne apre una separata per l'interazione.
Voglio farlo su una sola riga. Una volta che esco dalla subshell, dovrei tornare alla normale shell "super" senza incidenti. Ci deve essere un modo ~~
NB: Quello che non sto chiedendo ...
- non chiedendo dove trovare la pagina man di bash
- non chiedendo come leggere i comandi di inizializzazione da un file ... So come fare, non è la soluzione che sto cercando
- non interessato ad usare lo schermo tmux o gnu
- non interessato a dare un contesto a questo. Vale a dire, la domanda è pensata per essere generale e non per uno scopo specifico
- se possibile, voglio evitare di usare soluzioni alternative che riescano a realizzare ciò che voglio, ma in modo "sporco". Voglio solo farlo su una sola riga. In particolare, non voglio fare qualcosa del genere
xterm -e 'ls'
exec bash
soluzione prevede due subshells separati. Voglio una subshell continua.
exec
è che sostituisce la prima subshell con la seconda, quindi rimani solo 1 shell sotto il genitore. Se i tuoi comandi di inizializzazione impostano le variabili di ambiente, saranno presenti nella shell eseguita.
exec
è che perdi tutto ciò che non viene trasmesso alle sottosche dall'ambiente, come variabili non esportate, funzioni, alias, ...
exec bash
soluzione non è adatta a te?