Eu quero executar um subshell bash, (1) executar alguns comandos, (2) e permanecer nesse subshell para fazer o que eu quiser. Eu posso fazer cada um destes individualmente:
Execute o comando usando o
-c
sinalizador:$> bash -c "ls; pwd; <other commands...>"
no entanto, ele retorna imediatamente ao shell "super" após a execução dos comandos. Também posso apenas executar um subshell interativo:
Iniciar novo
bash
processo:$> bash
e não sairá do subshell até que eu o diga explicitamente ... mas não consigo executar nenhum comando inicial. A solução mais próxima que encontrei é:
$> bash -c "ls; pwd; <other commands>; exec bash"
que funciona, mas não da maneira que eu queria, pois executa os comandos fornecidos em um subshell e, em seguida, abre um separado para interação.
Eu quero fazer isso em uma única linha. Depois de sair do subshell, devo retornar ao shell "super" comum sem incidentes. Deve haver uma maneira ~~
NB: O que não estou perguntando ...
- não perguntando onde obter a página de manual do bash
- sem perguntar como ler comandos de inicialização de um arquivo ... Eu sei como fazer isso, não é a solução que estou procurando
- não estou interessado em usar a tela tmux ou gnu
- não está interessado em dar contexto a isso. Ou seja, a questão é para ser geral, e não para qualquer finalidade específica
- se possível, quero evitar o uso de soluções alternativas que atinjam o que quero, mas de maneira "suja". Eu só quero fazer isso em uma única linha. Em particular, não quero fazer algo como
xterm -e 'ls'
exec bash
solução envolve dois subshells separados. Eu quero um subshell contínuo.
exec
é que ele substitui o primeiro subshell pelo segundo, então você fica apenas 1 shell abaixo do pai. Se seus comandos de inicialização configurarem variáveis de ambiente, elas existirão no shell executado.
exec
é que você perde nada que não seja passada para subshells através do ambiente, tais como variáveis não exportado, funções, aliases ...
exec bash
solução é inadequada para você?