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