A resposta do
æ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 manter o script em que $$
é o ID do processo do shell que está executando esse script. A metáfora /tmp/something.$$
é usada no caso de duas instâncias desse script serem executadas ao mesmo tempo, elas não tentarão usar o mesmo arquivo temporário.
A variável $SHELL
é configurada para o nome do shell que está executando o script. Se você usar / usr / bin / bash, presumivelmente, você gostaria que o mini-script também fosse usado.
O "$@"
é uma expressão de shell para "interpolar todos os meus argumentos, citando-os se necessário". Esta sintaxe peculiar faz com que
script.sh 'my file' your\ file
para interpolar os argumentos como dois elementos
"my file" "your file"
em vez dos quatro que $@
produziria
"my" "file" "your" "file"
As últimas linhas do script organizam um terminal gnome para começar a executar o mini-script e depois iniciar um shell interativo. Quando o gnome-terminal sai, o script temporário é removido porque a sujeira 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
, então o chmod
o torna executável e, em seguida, é executado.
$ chmod +x rt.sh && ./rt.sh echo hello world
O resultado de tudo isso será um terminal do gnome que inicia, exibe
hello world
na primeira linha e, em seguida, inicia um shell interativo:
msw@myhost:~$