Em vez de reformular minha pergunta, deixe-me descrever para você o caso de usuário desejado:
Eu crio um shell-script curto para executar o comando "gnome-terminal --someoptionflagname 'meu texto será postado'" e executo esse script.
O Gnome-terminal aparece, com o prompt da linha de comando seguido pelo meu texto.
ou seja: fields@mycomputer:/$ my text to be posted
Isso pode ser feito?
xnee
agora.Respostas:
Você pode fazer isso com o expect ( instalar ). Crie e torne executável
~/bin/myprompt
:e execute o Gnome Terminal com:
fonte
Se bem entendi, você deseja que sua primeira linha de entrada seja preenchida com o conteúdo que você passa na linha de comando do gnome-terminal.
Eu não sei como fazer exatamente isso com o bash, mas aqui está algo que se aproxima. No seu
~/.bashrc
, adicione a seguinte linha no final:Execute
gnome-terminal -x env BASH_INITIAL_COMMAND='my text to be posted' bash
e pressione Upno prompt para recuperar o texto.Observe também que, se você colocar os
set -o history
comentários seguidos no final do seu comentário.bashrc
, eles serão inseridos no histórico assim que o bash iniciar, para que você possa usá-los como base para editar, alcançando-os com a Uptecla e removendo a inicial#
.fonte
A sugestão de ændrük é muito boa e funcionou para mim, no entanto, o comando é codificado no script, e se você redimensionar a janela do terminal, ela não funcionará bem. Usando o código dele como base, adicionei a capacidade de enviar ao script myprompt o comando como argumento, e esse script manipula corretamente o redimensionamento da janela do terminal.
e execute o Gnome Terminal com:
fonte
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
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 causainterpolar os argumentos como dois elementos
em vez dos quatro que
$@
renderiamAs ú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 ochmod
tornará executável e, em seguida, será executado.O resultado de tudo isso será um terminal gnome que inicia, exibe
em sua primeira linha e, em seguida, inicia um shell interativo:
fonte
gnome-terminal -x sh -c "echo hello world; bash"
, o que não acho que a pergunta esteja sendo feita.As duas respostas que eu mais gostei de resolver isso estão usando
expect
e essa é a que recomendam usar a--init-file
flag no shebang ou na execução do terminal:... e execute-o como:
expect
é provavelmente a melhor solução (por razões que descreverei), exceto que não posso controlar se ele está instalado no meu ambiente de destino.O problema que encontrei com o bash
--init-file
egnome-terminal
o s--command
como um hack para resolver isso é que o shell não tem acesso ao STDIN durante a execução de scripts init. Se, por exemplo, eu quiser executar algo que exija entrada do usuário (ftp, telnet, etc), mas deixe o shell pai em execução depois, não funcionará; a única exceção que vi até agora é ssh:... mas o que eu preciso é mais complicado do que este exemplo de brinquedo. De qualquer forma, espero que o
--init-file
material seja útil para quem lê esta pergunta.fonte
Você pode usar os argumentos
-e
ou-x
para executar um comando dentro de um terminal recém-exibido, mas não é exatamente isso que você deseja.fonte