run bash command in new shell and stay in new shell after this command executes
For the case where the initial set of command is static and contain multiple commands, it is usually easier to use here documents
to pass the initial commands, instead of constructing a script with series of echo commands.
This approach helps when the commands contain quotes, or various expansions. With the quoted here-documents (the 3<<'__INIT__' ... '__INIT__'
) variant, no expansion of the here document text is performed, eliminating the need to quote specific part of the commands.
Instead of
bash --rcfile <(echo "export PS1='> ' && ls && command1 && command2")
Use
bash --rcfile /dev/fd/3 3<<'__INIT__'
export PS1='> '
ls
command1
command2
__INIT__
You can achieve something similar by abusing the --rcfile
option:
bash --rcfile <(echo "export PS1='> ' && ls")
From bash manpage:
--rcfile file
Execute commands from file instead of the system wide initialization file /etc/bash.bashrc and the standard personal initialization file ~/.bashrc if the shell is interactive