Chcę móc uruchomić polecenie, nie powiedzie się, ponieważ nie ma odpowiednich uprawnień. Następnie mogę napisać „proszę”, aby sudo polecenie, które właśnie uruchomiłem.
Oto, co chcę robić w terminalu:
$ run command
"you don't have access to do that"
$ please
"ran successfully"
Widziałem, że !!
pobierze poprzednie polecenie, więc pomyślałem, że mogę go użyć, ale nie mogę go uruchomić.
mój skrypt powłoki please.sh wygląda tak, ale nie mogę zmusić żadnego z nich do działania. Mówi tylko „nie znaleziono polecenia !!” i drukuje użycie sudo.
#!/bin/zsh
#sudo !!
#sudo `!!`
sudo $(!!)
command-line
zsh
jb.
źródło
źródło
sudo !!
czy będzie działał zgodnie z oczekiwaniami? Myślę !! może być po prostu pseudonimem bash, więc może nie działać w zsh!!
i inne) działa tylko w interaktywnych powłokach, a nie w skryptach.sudo !!
w trybie interaktywnym działa prawie zgodnie z oczekiwaniami. po wciśnięciu enter zastąpi!!
poprzednie polecenie. następnie musiałem ponownie nacisnąć Enter, aby go uruchomić.Odpowiedzi:
Nie można używać
!!
w skrypcie powłoki, ponieważ nie można uzyskać dostępu do powłoki nadrzędnej w powłoce podrzędnej. Chociaż zalecam używaniesudo !!
, jeśli naprawdę chcesz stworzyć skrypt BASH, musisz użyć .bash_history, tak jak poniżej:To zdecydowanie NIE jest idealne rozwiązanie, ale powinno wystarczyć.
Jeśli używasz ZSH, to nie zadziała, ponieważ ZSH nie wyświetla danych wyjściowych do .bash_history (o ile wiem).AKTUALIZACJA : Oto wersja, która powinna współpracować z ZSH:Mam nadzieję że to pomoże!
Jeśli nie rozumiesz skryptu, uruchamia on po prostu ostatnie polecenie wprowadzone w BASH za pomocą sudo.
źródło
fc
lubhistory
wbudowanych. Domyślnie $ HISTFILE nie jest aktualizowany, dopóki nie wylogujesz się z bash.Dodaj do swojego .zshrc:
źródło
fc
oznacza polecenie naprawy. Dokumentacja jest tutaj .alias lastcmd="fc -ln -1 | pbcopy"
Wierzę, że to powinno działać na Ubuntu (?):alias lastcmd="fc -ln -1 | xclip -selection clipboard
.