Como fazer o eco (uma string (executável)) para o prompt, para que o cursor pisque no final da linha?

3

Como echo (a (executable-)string) para o prompt para fazer o cursor sentar no final da linha?

Para que eu possa pressionar Enter para executar ou Ctrl - C para jogar fora a linha.

Isso é possível?

Eu sei que um script bash (interativo) provavelmente seria mais legal, mas eu gostaria de mantê-lo simples.

Exemplo:

echo_to_prompt "rm -R ./tmp/logs/delete_me_every_once_in_a_while/"

resultaria em:

user@machine:~$ rm -R ./tmp/logs/delete_me_every_once_in_a_while/[CURSOR]
    
por johnbot 09.10.2012 / 13:07

3 respostas

1

Se você precisar do comando echo_to_prompt () em um shell script ou na linha de comando normal, você pode simplesmente usar read :

#!/bin/sh

echo_to_prompt() {
        echo -n "$USER@$HOSTNAME:$PWD $" $@
        read && $@
}

echo_to_prompt rm -R ./tmp/logs/delete_me_every_once_in_a_while/

Você pode adicionar a função echo_to_prompt () ao seu .bashrc / .profile / ... se você quiser na linha de comando.

    
por 09.10.2012 / 14:14
1

Existem algumas sequências de controle que você pode enviar para um terminal e simulará algumas entrada. Você não pode simular qualquer entrada diretamente, no entanto: isso não seria particularmente útil, e seria perigoso gerar uma entrada arbitrária ao exibir um arquivo que contenha caracteres de controle.

A maioria dessas sequências de controle (Relatório de Status do Dispositivo, relatório de posição do mouse, etc.) envia de volta sequências de controle que são inofensivas se forem digitadas. Alguns terminais tradicionais (incluindo versões mais antigas do xterm) tinham uma seqüência de controle para enviar de volta o título da janela, que pode ser definido por outra seqüência de controle, mas os terminais modernos ignoram esse comando.

Para encurtar uma longa história, isso não é possível, precisamente para evitar o que você está tentando fazer.

    
por 10.10.2012 / 01:55
0

com zsh.

zle-line-init() {
  ((SECONDS - last < 300)) && return
  LBUFFER="rm -R ./... "
  last=$SECONDS
  zle -R
}
zle -N zle-line-init

(para fazer isso (no máximo) a cada 5 minutos).

Não gosto da ideia de um comando aparecer de repente no meu prompt.

    
por 09.10.2012 / 13:19