A resposta de ændrük é boa, mas talvez um pouco pesada para a tarefa.
Aqui está um script que escreve um script com base em seus argumentos
#!/bin/sh
# terminal-plus-command: start a subordinate terminal which runs
# the interactive shell after first running the command arguments
tmpscript=/tmp/tmpscript.$$
echo "#!$SHELL" > $tmpscript
echo "$@" >> $tmpscript
echo exec "$SHELL" >> $tmpscript
chmod +x $tmpscript
gnome-terminal --command $tmpscript
rm -f $tmpscript
Se você não fez muita programação shell, parece haver mais mágica aqui do que existe. Primeiro, nomeio um arquivo temporário para armazenar o script, onde $$
está o ID do processo do shell que está executando esse script. A /tmp/something.$$
metáfora é usada caso duas instâncias desse script sejam executadas ao mesmo tempo, elas não tentarão usar o mesmo arquivo temporário.
A variável $SHELL
é definida como o nome do shell que está executando o script. Se você usa / usr / bin / bash, provavelmente deseja que o mini-script também o use.
O "$@"
é um idioma de shell para "interpolar todos os meus argumentos, citando-os se necessário". Essa sintaxe peculiar causa
script.sh 'my file' your\ file
interpolar os argumentos como dois elementos
"my file" "your file"
em vez dos quatro que $@
renderiam
"my" "file" "your" "file"
As últimas linhas do script organizam um terminal gnome para começar a executar o mini-script e, em seguida, iniciar um shell interativo. Quando o gnome-terminal sai, o script temporário é removido porque o lixo não é legal.
A última linha não faz parte do mini-script, demonstra que o mini-script funciona. Se o script de 11 linhas acima estiver em um arquivo chamado, rt.sh
ele o chmod
tornará executável e, em seguida, será executado.
$ chmod +x rt.sh && ./rt.sh echo hello world
O resultado de tudo isso será um terminal gnome que inicia, exibe
hello world
em sua primeira linha e, em seguida, inicia um shell interativo:
msw@myhost:~$