Eu quero poder executar um comando, ele falha porque não tem permissões apropriadas. Então eu posso escrever "please" 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"
Vi que !!
ele pegaria o comando anterior, então pensei que poderia usá-lo, mas não consigo fazê-lo funcionar.
meu script de shell please.sh se parece com isso, mas não consigo fazer com que nenhum deles funcione. Diz apenas "comando não encontrado !!" e imprime o uso do sudo.
#!/bin/zsh
#sudo !!
#sudo `!!`
sudo $(!!)
command-line
zsh
jb.
fonte
fonte
sudo !!
, ele será executado conforme o esperado? Eu acho que !! pode ser apenas um alias de bash, por isso pode não funcionar em zsh!!
e outros) só funciona em shells interativos e não em scripts.sudo !!
no modo interativo quase funciona como esperado. quando eu pressione enter, ele substituirá!!
o comando anterior. então eu tive que pressionar enter novamente para executá-lo.Respostas:
Você não pode usar
!!
em um script de shell, pois não pode acessar o shell pai em um shell filho. Embora eu recomende o usosudo !!
, se você realmente deseja criar um script BASH, teria que usar .bash_history, assim:Definitivamente NÃO é uma solução perfeita, mas deve funcionar.
Se você estiver usando o ZSH, isso não funcionará, pois o ZSH não gera saída para .bash_history (que eu saiba).UPDATE : Aqui está uma versão que deve funcionar com o ZSH:Espero que isto ajude!
Se você não entende o script, ele simplesmente executa o último comando digitado no BASH com o sudo.
fonte
fc
ouhistory
internos. Por padrão, o $ HISTFILE não é atualizado até você sair do bash.Adicione ao seu .zshrc:
fonte
fc
significa comando de correção. A documentação está aqui .alias lastcmd="fc -ln -1 | pbcopy"
Eu acredito que este trabalho deve no Ubuntu (?):alias lastcmd="fc -ln -1 | xclip -selection clipboard
.