O bash (ou qualquer shell) tem um modo 'sobrescrever'?

2

Estou executando comandos semelhantes em (por exemplo) um conjunto de arquivos. Por exemplo, digamos que estou fazendo algo assim (isso não é o que estou fazendo, é apenas um exemplo):

> cat path/to/dir/file01.txt
  [file contents]
> another-command path/to/dir/file01.txt
  [more output]
> cat path2/to/dir/file02.txt
  [file contents, from which I can tell I should do something different]
> different-command path2/to/dir/file02.txt
  [yet more output]
> cat path3/to/dir/file03.txt
  [file contents]
> another-command path3/to/dir/file03.txt
  [output]

etc.

Seria conveniente se, depois de usar a tecla para retornar a um comando anterior, eu pudesse sobrescrever um texto não duplicado - como o nome do arquivo, ou uma parte comum do caminho - que ter que apagá-lo e redigitá-lo.

Existe uma maneira de fazer isso?

    
por Wilson F 25.06.2015 / 23:39

3 respostas

3

Bash tem isso, mas não está vinculado a nenhuma chave por padrão.

Adicione a linha

Control-o: overwrite-mode

para o seu $HOME/.inputrc ou /etc/inputrc para usar Ctrl + o para alternar entre o modo de inserção e o modo de substituição.

Veja a seção READLINE na página de manual do Bash para saber mais.

    
por Florian Diesch 26.06.2015 / 00:44
4

Não é o que você pediu diretamente, mas você pode usar várias formas de interacção histórica para simplificar a sua tarefa:

$ cat path/to/dir/file01.txt
cat: path/to/dir/file01.txt: No such file or directory
$ different-command !$
different-command path/to/dir/file01.txt
bash: different-command: command not found
$ cat !$:s/1/2/
cat path/to/dir/file02.txt
cat: path/to/dir/file02.txt: No such file or directory
$ ^2^3
cat path/to/dir/file03.txt
cat: path/to/dir/file03.txt: No such file or directory
$ !-3:s/1/3/
different-command path/to/dir/file03.txt
bash: different-command: command not found
$ !diff:s/3/4/
different-command path/to/dir/file04.txt
bash: different-command: command not found

Ignorando os erros, cada vez que eu usei a interação do histórico ( !$ , !$:s/1/2 , ^2^3 ), você pode ver como bash o expandiu.

  • !$ - a última palavra do comando anterior
  • :s/1/2 - substitui a primeira ocorrência de 1 por 2 na palavra selecionada (nesse caso, !$ novamente).
  • ^2^3 - substitui a primeira ocorrência de 2 por 3 em todo o comando anterior.
  • !-3 - executa o terceiro e último comando.
  • !diff - execute o último comando que iniciou com diff .
por muru 25.06.2015 / 23:49
2

Você pode ligar uma chave a uma diretiva readline em $HOME/.inputrc .

"code": overwrite-mode

Para descobrir o código gerado por uma tecla específica, pressione Ctrl e V juntos e pressione a tecla. Por exemplo, quando você aperta a tecla Ins (insert) você vê ^[[2~ . Tenha em atenção que ^[ é apenas a representação de ecrã para ESC, representada por \e para readline. Portanto, você deve adicionar a seguinte linha a $HOME/.inputrc :

"\e[2~": overwrite-mode

e reinicie o bash.

    
por colemar 02.03.2016 / 15:27