Esta es una pregunta de seguimiento para
Si desea rehacer el mismo comando consudo !!
después de hacer un comando como este:
echo "something">/path/file
Puede utilizar la sintaxis de reemplazo global para recuperar el comando:
!!:gs/>/|sudo tee -a /
Utilice un espacio después del-aparámetro.
Este es el equivalente asudo!!pero le ayuda a evitar las restricciones de sudo para < y >. Porque sudo no te permite usar [<, >].
¿Cómo puedo poner esto en un alias en mi .bashrc
para poder usarlo de manera simple?
Lo intenté
alias redo='!!:gs/>/|sudo tee -a /'
Pero esto no funciona, me sale el error:
$ echo "sdfdsf">/path/file
bash: /path/file: no permissions
$ redo
bash: /: Is a directory
tee: /: Is a directory
Respuesta1
Creo que lo que buscas es:
sudo sh -c "!!"
Esto se traducirá !!
a su último comando y mantendrá funcionales las redirecciones/canalizaciones/variables del shell:
➜ ~ ping 10.0.0.1
--- 10.0.0.1 ping statistics ---
6 packets transmitted, 3 received, 50% packet loss, time 5001ms
rtt min/avg/max/mdev = 1.736/1.951/2.182/0.185 ms
➜ ~ sudo sh -c "!!" ## And becomes like this:
➜ ~ sudo sh -c "ping 10.0.0.1"
Respuesta2
No es exactamente una respuesta a tu pregunta, pero: no hagas esto.
La idea detrás de este alias (suponiendo que funcione) es que transformarse >
en |tee -a foo
es una buena idea. En primer lugar, incluso en el mejor de los casos, no son equivalentes. >
sobrescribirá un archivo, tee -a
lo agregará.
En segundo lugar, esto no maneja construcciones comunes como echo >>foo
(que se transformaría echo |sudo tee -a |sudo tee -a foo
y fallaría) o echo 2>&1
(que se transformaría echo 2|sudo tee -a &1
y fallaría).
Ahora, es posible que puedas escribir una sustitución mucho más complicada que pueda manejar todos estos casos de manera razonable, pero eso me lleva al tercer punto:
Esto ejecutaría un comando como root sin que usted tenga la oportunidad de revisar el comando que está a punto de ejecutarse, lo que me parece una idea extremadamente mala, especialmente teniendo en cuenta el hecho de que, para cuando tenga algo que funcione incluso para todos los En los casos más comunes, probablemente será bastante complejo.
Así que, en definitiva, te recomiendo que no intentes nada de este tipo.