Último comando no ksh

5

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]"?

    
por Xodarap 23.12.2011 / 16:13

6 respostas

2

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 .

    
por 24.12.2011 / 01:46
2

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ê ☺

    
por 27.02.2014 / 14:49
1

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.

    
por 23.12.2011 / 19:00
1

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
    
por 26.10.2012 / 19:39
0

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

    
por 24.12.2011 / 04:39
0

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$
    
por 26.10.2012 / 20:09