Execute novamente o comando anterior sob sudo

7

Eu quero poder executar um comando, pois ele não tem as permissões adequadas. Então eu posso escrever "por favor" para sudo o comando que acabei de executar.

Aqui está o que eu quero fazer no terminal:

$ run command
"you don't have access to do that"
$ please
"ran successfully"

Eu vi que !! pegaria o comando anterior, então achei que poderia usar isso, mas não consigo fazer isso funcionar.

meu shell script please.sh é assim, mas não consigo fazer nada disso funcionar. Apenas diz "comando não encontrado !!" e imprime o uso do sudo.

#!/bin/zsh

#sudo !!
#sudo '!!'
sudo $(!!)
    
por jb. 19.07.2012 / 02:57

2 respostas

6

Você não pode usar !! em um script de shell, já que não pode acessar o shell pai em um shell filho. Embora eu recomendo usar sudo !! , se você realmente quiser fazer um script BASH, você teria que usar .bash_history, assim:

#!/bin/bash
sudo 'cat $HOME/.bash_history | tail -n1'

Definitivamente, NÃO é uma solução perfeita, mas deve funcionar. Se você estiver usando o ZSH, isso não funcionará, já que o ZSH não envia para .bash_history (que eu saiba). UPDATE : Aqui está uma versão que deve funcionar com o ZSH :

#!/usr/bin/zsh
. $HOME/.zshrc
sudo 'cat \'readlink -f $HISTFILE\' | tail -n1'

Espero que isso ajude!

Se você não entender o script, ele simplesmente executará o último comando inserido no BASH com o sudo.

    
por MiJyn 19.07.2012 / 04:41
17

Adicione ao seu .zshrc:

alias please='sudo $(fc -ln -1)'
    
por jpschorr 30.09.2014 / 19:23