Eu acidentalmente digitei r
no shell e obtive o que parecia ser uma repetição do último comando que executei.
man zshbuiltins
, inutilmente, diz o seguinte:
r
- O mesmo quefc -e -
.
A documentação para fc
é quase impenetrável , mas consegui extrair estas citações:
fc [ -e
ename
] [ -LI ] [ -m
match
] [
old=new
... ] [
first
[
last
] ]
o programa editor ename é invocado em um arquivo contendo esses eventos históricos.... Quando a edição é concluída, o comando editado é executado.
Se ename for
-
, nenhum editor será chamado.
Isso me parece que o comportamento de r
é semelhante ao ponto de exclamação !
, pois repete a história. De fato, se eu setopt banghist
voltar a ligar, coisas como r man
e ! man
ambas parecem repetir minha última chamada para o homem.
Quais são as semelhanças e diferenças entre r
e !
? O que é um cenário hipotético em que eu poderia usar r
?
Você fez um bom trabalho citando as passagens corretas da página de manual.
zsh herdado
r
de ksh , pois nem o bash nem o csh conhecem esse comando. Suponho que a implementação seja feita para ser o mais compatível possível com esses três shells principais.Por outro lado, o mecanismo history bang
!
se origina do csh , que pode ser desabilitado comsetopt NO_BANG_HIST
.Uma diferença entre esses dois mecanismos que me vem à mente é que
r
e!
são analisados de maneira diferente, pois!
é uma palavra reservada, masr
apenas um comando (embutido). Isso significa que você pode escrever, por exemploque obtém (dependendo de suas configurações após pressionar
SPACE
ouENTER
) parao que não é possível, a
r
menos que você use a substituição$(r)
de comando, é claro.Então, acho que tudo se resume a preferências ou hábitos pessoais (se você costumava usar ksh ou csh ) ...