Eu usaria a edição de linha de comando: tipo Acima e Início (ou Ctrl + P então Ctrl + A , ou alguma outra seqüência no modo vi), entre com sudo␣
e pressione Return .
No bash eu posso usar !!
para indicar o último comando. Em ksh, acho que você pode usar r
para fazer algo semelhante, mas parece falhar em um dos meus padrões comuns: digitando sudo [last command]
.
> cp foo /bar
cp: permission denied
> r c # If I do this it will repeat my cp call
> sudo r c # when I do this, it tells me that "r" is not a command
Como posso usar o histórico para digitar rapidamente "sudo [último comando]"?
Eu usaria a edição de linha de comando: tipo Acima e Início (ou Ctrl + P então Ctrl + A , ou alguma outra seqüência no modo vi), entre com sudo␣
e pressione Return .
mksh envia esse alias padrão em seu exemplo .mkshrc
desde há algum tempo:
alias doch='sudo mksh -c "$(fc -ln -1)"'
Aqui, "doch" é um trocadilho que somente falantes de alemão podem entender, então deixe-me tentar explicar: algum comando diz que você não tem permissão para fazer algo, o que leva a uma situação sim-não-sim-não, exceto que temos uma palavra específica para isso em alemão. Então, esse alias é uma resposta “nee-nee, eu sou permitido fazer isso!” Para a mensagem de erro acima. Aprendizes da Língua Inglesa também sabem algo sobre isso, caso eu seja confuso demais…
Mas não deixe que a nomeação desse apelido restrinja você ☺
A melhor maneira de fazer isso é fazer uma função autoloaded, digamos sudo_r
:
function sudo_r {
typeset comm=$(hist -nl ${@:- -1 -1} | sed 1q);
print -- $comm;
sudo $comm;
}
Então (diga) "alias ss = sudo_r". Quando isso for feito, você pode digitar ss cp
para repetir o último comando que começa com cp
, mas prefixando-o com sudo
. Ou se você
tipo ss
Retornar , será sudo
do comando anterior.
Acho que a maneira mais fácil é criar um alias como este:
alias ss='sudo $(fc -r -l -n 1 1)
Exemplo:
$ mkdir /test
mkdir: /test: Permission denied
$ ss
$ test -d /test && echo ok
ok
Já faz um tempo desde que eu usei o ksh, mas acredito que o comando foi recall
normalmente com um alias para r
No bash você pode recordar o último comando que começou com qualquer texto
digitando o texto e, em seguida, ESC CTRL-e
, isso é vantajoso em relação ao outro! estilo histórico comandos como ele simplesmente "recorda" o comando sem executá-lo, portanto, dando uma chance de editar o texto antes de executar
$ sudu <ESC><CTRL>-e
chama o último comando que começou com sudo
na linha de comando, a ser editado antes da execução
Eu uso r #number para repetir um comando do histórico. ou seja,
dd762c1n4 /tmp 245$ history
245 history
dd762c1n4 /tmp 246$
dd762c1n4 /tmp 246$ r 245
history
245 history
246 history
dd762c1n4 /tmp 247$
Tags ksh command-history