O comando $(!! |& tail -1) deve fazer:
$ git something
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git
$ $(!! |& tail -1)
$(git something |& tail -1)
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
git-man liberror-perl
Como você pode ver, o comando sudo apt-get install git está sendo executado.
EDITAR: Desmembrando $(!! |& tail -1)
-
$()é o padrão de substituição do comandobash -
bashexpandirá!!para o último comando executado -
|&part é complicado. Normalmente pipe|pegará o STDOUT do comando do lado esquerdo e passará como STDIN para o comando no lado direito do|, no seu caso o comando anterior imprime sua saída no STDERR como uma mensagem de erro. Então, fazer|não ajudaria, precisamos passar tanto o STDOUT quanto o STDERR (ou somente o STDERR) para o comando do lado direito.|&passará o STDOUT e o STDERR como o STDIN para o comando do lado direito. Alternativamente, melhor você só pode passar o STDERR:$(!! 2>&1 >/dev/null | tail -1) -
tail -1, como de costume, imprimirá a última linha de sua entrada. Aqui, em vez de imprimir a última linha, você pode ser mais preciso, como imprimir a linha que contém o comandoapt-get install:$(!! 2>&1 >/dev/null | grep 'apt-get install')