Esta es una respuesta tardía, pero tuve exactamente el mismo problema y google me envió a esta página, por lo que para completar aquí es cómo solucionó el problema.
Por lo que yo sé, bash no tiene la opción de hacer lo que el póster original quería hacer. La opción -c siempre regresará después de que se hayan ejecutado los comandos.
solución Roto: el intento más simple y evidente de evitar esto es:
bash -c 'XXXX ; bash'
Esto funciona en parte (aunque con una capa de sub-shell extra). Sin embargo, el problema es que mientras un subconjunto heredará las variables de entorno exportadas, los alias y las funciones no se heredan. Entonces esto podría funcionar para algunas personas pero no es una solución general.
Mejor: la forma de evitar esto es crear dinámicamente un archivo de inicio y llame fiesta con este nuevo archivo de inicialización, asegurándose de que su nuevo archivo init llama a su normal/.bashrc si ~ necesario.
# Create a temporary file
TMPFILE=$(mktemp)
# Add stuff to the temporary file
echo "source ~/.bashrc" > $TMPFILE
echo "<other commands>" >> $TMPFILE
echo "rm -f $TMPFILE" >> $TMPFILE
# Start the new bash shell
bash --rcfile $TMPFILE
Lo bueno es que el archivo init temporal se borrará solo en cuanto se lo utilice, reduciendo el riesgo de que no se limpie correctamente.
Nota: No estoy seguro de si/etc/bashrc se suele llamar como parte de un shell normal que no es de inicio de sesión.Si es así, es posible que desee obtener el archivo/etc/bashrc, así como su ~/.bashrc.
no entiendo la última parte acerca de los alias. Los alias se ejecutan en el contexto del shell actual, por lo que no tienen el problema que está pidiendo que se haya resuelto (aunque por lo general, las funciones son mejores que los alias, por varias razones). – tripleee
Quiero ser capaz de poner algo como 'alias shortcut = 'bash -lic" some_command "'' en mi .bashrc luego ejecutar 'shortcut' y tener un nuevo shell con' some_command' ya ejecutado en él. –