Não tenho 100% de certeza de que entendi exatamente o que você está pedindo, e (infelizmente) não tenho acesso a um sistema com bash
no momento, mas talvez o seguinte ajude você. Coloque isso no final do seu .bashrc
:
if [ -f ~/.bash_initial_command ]
then
. ~/.bash_initial_command
rm ~/.bash_initial_command
fi
(onde .bash_initial_command
é um nome de arquivo arbitrário; escolha um diferente se quiser) e, em seguida, escreva um script que faça isso:
(echo "history –s '$@'"; echo "$@") > ~/.bash_initial_command
Ou seja, isso coloca o comando (que é apresentado ao script acima como argumento (s)) em um local onde o próximo bash
interativo para iniciar o encontrará e o executará. (Por exemplo, se você executar set_up_cmd ls –l
, seu próximo bash
executará ls –l
.) history –s
colocará um comando no histórico sem executá-lo.
Observação: Eu não sei se isso funcionará em .bashrc
.
Isso precisará de mais refinamento se você quiser usar comandos com aspas (isto é, caracteres especiais citados) ou redirecionamento ( <
ou >
); ou comandos compostos (ou seja, contendo ;
, |
, &&
ou ||
).
Um problema menor: se você Ctrl + C o comando, isso provavelmente terminará o processamento .bashrc
e assim evitará que o arquivo .bash_initial_command
seja apagado. Você provavelmente pode lidar com isso fazendo
if [ -f ~/.bash_initial_command ]
then
mv ~/.bash_initial_command ~/.bash_initial_command.$$
trap "rm -f ~/.bash_initial_command.$$" 0
. ~/.bash_initial_command.$$
rm -f ~/.bash_initial_command.$$
fi
Isso dá a .bash_initial_command
um nome único, para evitar colisões, e faz com que ele seja excluído quando o shell sair.
Se você precisar ativar vários deles simultaneamente, considere a criação do nome "tty" $(basename $(tty))
no nome do arquivo .bash_initial_command
.
Claro, isso torna ainda mais importante ter certeza de que seu diretório pessoal não pode ser escrito por ninguém além de você mesmo.