¿Cómo puedo obtener una lista de todos los repositorios y PPA de la línea de comandos en un script de instalación?

217

Sé cómo enumerar todos los paquetes instalados en mi sistema.

Pero, ¿cómo podría obtener una lista de todos los repositorios y PPA en un script que pueda ejecutar en una nueva máquina para replicar la configuración del repositorio, incluidas las claves?

Sé que puedo investigar /etc/apt/sources.listy /etc/apt/sources.list.d, pero estoy buscando una forma de generar una secuencia de comandos que ejecute todos los apt-add-repositorycomandos en un nuevo sistema (que resuelva obtener todas las claves).

¿Algunas ideas?

Stwissel
fuente

Respuestas:

106

Puedes mostrar todo con:

grep ^ /etc/apt/sources.list /etc/apt/sources.list.d/*
wojox
fuente
13
¿Qué hay egrep -v '^#|^ *$' /etc/apt/sources.list /etc/apt/sources.list.d/*de eliminar las líneas comentadas y las líneas en blanco?
3
¿podría explicar el uso de ^after grepin grep ^ /etc/apt/sources.list /etc/apt/sources.list.d/*?
44
@ vasa1 El símbolo de intercalación ^ y el signo de dólar $ son metacaracteres que coinciden respectivamente con la cadena vacía al principio y al final de una línea.
wojox
44
Uso grep ^ [^ #] ... - Oculta automáticamente todas las fuentes comentadas
Ross Aiken
13
Si no va a filtrar nada, ¿no sería más sencillo simplemente ejecutarlocat /etc/apt/sources.list /etc/apt/sources.list.d/*
Jbo5112
99

Gracias por los consejos. Con un poco de limpieza obtuve un script que enumera los PPA, pero no cualquier otro repositorio:

#! /bin/sh 
# listppa Script to get all the PPA installed on a system ready to share for reininstall
for APT in `find /etc/apt/ -name \*.list`; do
    grep -o "^deb http://ppa.launchpad.net/[a-z0-9\-]\+/[a-z0-9\-]\+" $APT | while read ENTRY ; do
        USER=`echo $ENTRY | cut -d/ -f4`
        PPA=`echo $ENTRY | cut -d/ -f5`
        echo sudo apt-add-repository ppa:$USER/$PPA
    done
done

Cuando lo llama, listppa > installppa.shobtiene un script que puede copiar en una nueva máquina para reinstalar todo el PPA.

Siguiente parada: haz eso para los otros repositorios:

#! /bin/sh
# Script to get all the PPA installed on a system
for APT in `find /etc/apt/ -name \*.list`; do
    grep -Po "(?<=^deb\s).*?(?=#|$)" $APT | while read ENTRY ; do
        HOST=`echo $ENTRY | cut -d/ -f3`
        USER=`echo $ENTRY | cut -d/ -f4`
        PPA=`echo $ENTRY | cut -d/ -f5`
        #echo sudo apt-add-repository ppa:$USER/$PPA
        if [ "ppa.launchpad.net" = "$HOST" ]; then
            echo sudo apt-add-repository ppa:$USER/$PPA
        else
            echo sudo apt-add-repository \'${ENTRY}\'
        fi
    done
done

Esto debería funcionar. Necesitaba una pregunta sobre superusuario para descubrir la expresión regular correcta.

Stwissel
fuente
1
En el grep -oejemplo, el \` de [a-z0-9\-]que no está haciendo lo que se espera. Realmente coincide con una barra diagonal inversa literal . No es necesario para escapar de la -cuando se está al principio o al final de la []lista; en realidad, ¡no puedes escapar ! ... En este caso, \`(probablemente) no causará un problema, porque (con suerte) no encontrarás una barra invertida en la debentrada.
Peter.O
2
Tenga en cuenta que los nombres de PPA pueden contener puntos, por lo que creo que desea cambiar su expresión regular ahttp://ppa.launchpad.net/[a-z0-9-]\+/[a-z0-9.-]\+
kynan
No, desea cambiar la expresión regular a en [[:graph:]] lugar de [a-z...blah.anything]porque coincidirá con cualquier carácter alfanumérico + de puntuación; en eso consisten los nombres de PPA.
MichalH
Supongo que debe incluir debpalabras al comienzo de cada línea de repositorio, si no se da en ppa:$USER/$PPAforma.
jarno
@stwissel ¿alguna razón en particular que usó find y grep? Puede hacer fácilmente un pegote que analiza el caparazón y pasarlo a grep. grep -Po "(?<=^deb\s).*?(?=#|$)" /etc/apt/{sources.list,sources.list.d/*.list} | while read ENTRY ; do echo $ENTRY; doneTenga en cuenta que, tal como está escrito, le muestra el nombre del archivo del que proviene cada entrada, por lo que necesitaría hacer un recorte desde el comienzo del resultado hasta el primer colon, pero eso no es demasiado difícil con el corte. Es posible que también desee pasarlo uniqsi no desea múltiples entradas para la misma fuente (por ejemplo, si tiene instalado Google Chrome Stable / Beta / Dev).
dragon788
23

Me sorprende que aún no se haya publicado la forma más simple pero efectiva de obtener todas las fuentes de software binario habilitadas junto con el archivo en el que están especificadas:

grep -r --include '*.list' '^deb ' /etc/apt/sources.list /etc/apt/sources.list.d/

De todos los archivos procesados, esto imprimirá cada línea que comience con deb. Esto excluye las líneas comentadas, así como las deb-srclíneas para habilitar repositorios de código fuente.

Realmente busca solo todos los *.listarchivos que serán analizados apt, pero, por ejemplo, ningún *.list.savearchivo utilizado para copias de seguridad u otros con nombres ilegales.


Si desea una salida correcta más corta pero posiblemente solo en el 99.9% de todos los casos que puede buscar demasiados archivos (incluye todos los /etc/apt/sources.list*archivos y directorios, no solo /etc/apt/sources.listy `/etc/apt/sources.list.d/*), también podría utilizar este:

grep -r --include '*.list' '^deb ' /etc/apt/sources.list*

A menos que haya archivos que no deberían estar allí, la salida será la misma.


Un ejemplo de salida en mi máquina sería este:

/etc/apt/sources.list:deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily main restricted
/etc/apt/sources.list:deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-updates main restricted
/etc/apt/sources.list:deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily universe
/etc/apt/sources.list:deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-updates universe
/etc/apt/sources.list:deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily multiverse
/etc/apt/sources.list:deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-updates multiverse
/etc/apt/sources.list:deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-backports main restricted universe multiverse
/etc/apt/sources.list:deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-security main restricted
/etc/apt/sources.list:deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-security universe
/etc/apt/sources.list:deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-security multiverse
/etc/apt/sources.list:deb http://archive.canonical.com/ubuntu wily partner
/etc/apt/sources.list.d/maarten-fonville-ubuntu-ppa-wily.list:deb http://ppa.launchpad.net/maarten-fonville/ppa/ubuntu wily main
/etc/apt/sources.list.d/webupd8team-ubuntu-tor-browser-wily.list:deb http://ppa.launchpad.net/webupd8team/tor-browser/ubuntu wily main
/etc/apt/sources.list.d/fossfreedom-ubuntu-indicator-sysmonitor-wily.list:deb http://ppa.launchpad.net/fossfreedom/indicator-sysmonitor/ubuntu wily main
/etc/apt/sources.list.d/getdeb.list:deb http://archive.getdeb.net/ubuntu wily-getdeb apps

Si desea una salida más bonita, canalicemos sed:

grep -r --include '*.list' '^deb ' /etc/apt/ | sed -re 's/^\/etc\/apt\/sources\.list((\.d\/)?|(:)?)//' -e 's/(.*\.list):/\[\1\] /' -e 's/deb http:\/\/ppa.launchpad.net\/(.*?)\/ubuntu .*/ppa:\1/'

Y veremos esto:

deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily main restricted
deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-updates main restricted
deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily universe
deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-updates universe
deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily multiverse
deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-updates multiverse
deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-backports main restricted universe multiverse
deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-security main restricted
deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-security universe
deb http://ftp-stud.hs-esslingen.de/ubuntu/ wily-security multiverse
deb http://archive.canonical.com/ubuntu wily partner
[maarten-fonville-ubuntu-ppa-wily.list] ppa:maarten-fonville/ppa
[webupd8team-ubuntu-tor-browser-wily.list] ppa:webupd8team/tor-browser
[fossfreedom-ubuntu-indicator-sysmonitor-wily.list] ppa:fossfreedom/indicator-sysmonitor
[getdeb.list] deb http://archive.getdeb.net/ubuntu wily-getdeb apps
Byte Commander
fuente
1
Siguiendo la respuesta aceptada, parece que OP quería que se mostraran PPA en el ppa:<user>/<project>formulario.
Muru
La pregunta realmente pide generar un script que instale / habilite todos los repositorios. Pero el título de la pregunta solo se trata de enumerarlos. Además, la segunda respuesta con la puntuación más alta solo los enumera también, pero enumera demasiado.
Byte Commander
Bien, pero ya había votado. : D
muru
Puede usar la opción `-h` para que grep omita los nombres de los archivos.
jarno
11

Ejecute el siguiente comando:

apt-cache policy | grep http | awk '{print $2 $3}' | sort -u

Fuente

Nikos
fuente
En biónico, esto imprime líneas como ' mirrors.nic.funet.fi/ubuntubionic-security/main '
jarno
1
Nota: apt-cache policysolo mostrará los repositorios después de haber ejecutado apt-get update. Si acaba de agregar un repositorio con add-apt-repository, no aparecerá apt-cache policyhasta que ejecuteapt-get update
wisbucky
Por @wisbucky: sudo apt update > /dev/null 2>&1 && sudo apt-cache policy | grep http | awk '{print $2 $3}' | sort -ufunciona bien. gist.github.com/bmatthewshea/229da822f1f02157bff192a2e4a8ffd1
bshea
4

Utilizo este comando para enumerar todas las fuentes de software configuradas (repositorios), incluidas las actualmente deshabilitadas :

cat /etc/apt/sources.list; for X in /etc/apt/sources.list.d/*; do echo; echo; echo "** $X:"; echo; cat $X; done

Lo uso principalmente para solucionar problemas; esto ciertamente se puede incorporar a los scripts, pero es posible que desee limitarlo /etc/apt/sources.list.d/*para /etc/apt/sources.list.d/*.listque solo obtenga fuentes de software actualmente habilitadas.

Eliah Kagan
fuente
Gracias por los comentarios. cat enumera los archivos tal como están, por lo que necesitaría editarlos manualmente para generar un script (como se indica en la pregunta). El desafío con los repositorios: si solo copia los archivos desde / etc / apt no obtiene las claves del repositorio. Es por eso que quiero un guión que los obtenga para nosotros
stwissel
2

Entonces, cavando un poco, tenemos AptPkg::Class.

Entonces, usando perlpodemos hacer algo simple como esto ...

perl -MAptPkg::Cache -MData::Dumper -E'say Dumper [AptPkg::Cache->new->files()]' | less

Esto nos da una lista de todos los AptPkg::Class::PkgFilepaquetes. Probablemente podrías generar los apt-add-repositorycomandos con eso.

Evan Carroll
fuente
2

https://repogen.simplylinux.ch/ le dará una lista de todos los PPA para su versión de Ubuntu. Aquí hay una lista generada sin archivos de origen y sin impresora ppa de Samsung:

#------------------------------------------------------------------------------#
#                            OFFICIAL UBUNTU REPOS                             #
#------------------------------------------------------------------------------#


###### Ubuntu Main Repos
deb http://us.archive.ubuntu.com/ubuntu/ yakkety main restricted universe multiverse 

###### Ubuntu Update Repos
deb http://us.archive.ubuntu.com/ubuntu/ yakkety-security main restricted universe multiverse 
deb http://us.archive.ubuntu.com/ubuntu/ yakkety-updates main restricted universe multiverse 
deb http://us.archive.ubuntu.com/ubuntu/ yakkety-proposed main restricted universe multiverse 
deb http://us.archive.ubuntu.com/ubuntu/ yakkety-backports main restricted universe multiverse 

###### Ubuntu Partner Repo
deb http://archive.canonical.com/ubuntu yakkety partner

#------------------------------------------------------------------------------#
#                           UNOFFICIAL UBUNTU REPOS                            #
#------------------------------------------------------------------------------#


###### 3rd Party Binary Repos

#### Flacon PPA - http://kde-apps.org/content/show.php?content=113388
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F2A61FE5
deb http://ppa.launchpad.net/flacon/ppa/ubuntu yakkety main

#### Gimp PPA - https://launchpad.net/~otto-kesselgulasch/+archive/gimp
## Run this command: sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 614C4B38
deb http://ppa.launchpad.net/otto-kesselgulasch/gimp/ubuntu yakkety main

#### Google Chrome Browser - http://www.google.com/linuxrepositories/
## Run this command: wget -q https://dl.google.com/linux/linux_signing_key.pub -O- | sudo apt-key add -
deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main

#### Google Earth - http://www.google.com/linuxrepositories/
## Run this command: wget -q https://dl.google.com/linux/linux_signing_key.pub -O- | sudo apt-key add -
deb [arch=amd64] http://dl.google.com/linux/earth/deb/ stable main

#### Highly Explosive PPA - https://launchpad.net/~dhor/+archive/myway
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93330B78
deb http://ppa.launchpad.net/dhor/myway/ubuntu yakkety main

#### JDownloader PPA - https://launchpad.net/~jd-team
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6A68F637
deb http://ppa.launchpad.net/jd-team/jdownloader/ubuntu yakkety main

#### Lazarus - http://www.lazarus.freepascal.org/
## Run this command:  gpg --keyserver hkp://pgp.mit.edu:11371 --recv-keys 6A11800F  && gpg --export --armor 0F7992B0  | sudo apt-key add -
deb http://www.hu.freepascal.org/lazarus/ lazarus-stable universe

#### LibreOffice PPA - http://www.documentfoundation.org/download/
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1378B444
deb http://ppa.launchpad.net/libreoffice/ppa/ubuntu yakkety main

#### MEGA Sync Client - https://mega.co.nz/
deb http://mega.nz/linux/MEGAsync/xUbuntu_16.10/ ./

#### MKVToolnix - http://www.bunkus.org/videotools/mkvtoolnix/
## Run this command: wget -q http://www.bunkus.org/gpg-pub-moritzbunkus.txt -O- | sudo apt-key add -
deb http://www.bunkus.org/ubuntu/yakkety/ ./

#### Mozilla Daily Build Team PPA - http://edge.launchpad.net/~ubuntu-mozilla-daily/+archive/ppa
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys  247510BE
deb http://ppa.launchpad.net/ubuntu-mozilla-daily/ppa/ubuntu yakkety main

#### muCommander - http://www.mucommander.com/
## Run this command: sudo wget -O - http://apt.mucommander.com/apt.key | sudo apt-key add - 
deb http://apt.mucommander.com stable main non-free contrib  

#### Opera - http://www.opera.com/
## Run this command: sudo wget -O - http://deb.opera.com/archive.key | sudo apt-key add -
deb http://deb.opera.com/opera/ stable non-free

#### Oracle Java (JDK) Installer PPA - http://www.webupd8.org/2012/01/install-oracle-java-jdk-7-in-ubuntu-via.html
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EEA14886
deb http://ppa.launchpad.net/webupd8team/java/ubuntu yakkety main

#### PlayDeb - http://www.playdeb.net/
## Run this command: wget -O- http://archive.getdeb.net/getdeb-archive.key | sudo apt-key add -
deb http://archive.getdeb.net/ubuntu yakkety-getdeb games

#### SABnzbd PPA - http://sabnzbd.org/
## Run this command:  sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4BB9F05F
deb http://ppa.launchpad.net/jcfp/ppa/ubuntu yakkety main

#### SimpleScreenRecorder PPA - http://www.maartenbaert.be/simplescreenrecorder/
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 283EC8CD
deb http://ppa.launchpad.net/maarten-baert/simplescreenrecorder/ubuntu yakkety main

#### Steam for Linux - http://store.steampowered.com/about/
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F24AEA9FB05498B7
deb [arch=i386] http://repo.steampowered.com/steam/ precise steam

#### Syncthing - https://syncthing.net/
## Run this command: curl -s https://syncthing.net/release-key.txt | sudo apt-key add -
deb http://apt.syncthing.net/ syncthing release

#### Tor: anonymity online - https://www.torproject.org
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 886DDD89
deb http://deb.torproject.org/torproject.org yakkety main

#### Unsettings PPA - http://www.florian-diesch.de/software/unsettings/
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 0FEB6DD9
deb http://ppa.launchpad.net/diesch/testing/ubuntu yakkety main

#### VirtualBox - http://www.virtualbox.org
## Run this command: wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox_2016.asc -O- | sudo apt-key add -
deb http://download.virtualbox.org/virtualbox/debian yakkety contrib

#### Webmin - http://www.webmin.com
## Run this command: wget http://www.webmin.com/jcameron-key.asc -O- | sudo apt-key add -
deb http://download.webmin.com/download/repository sarge contrib

#### WebUpd8 PPA - http://www.webupd8.org/
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4C9D234C
deb http://ppa.launchpad.net/nilarimogard/webupd8/ubuntu yakkety main

#### Xorg Edgers PPA - https://launchpad.net/~xorg-edgers
## Run this command: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8844C542  
deb http://ppa.launchpad.net/xorg-edgers/ppa/ubuntu yakkety main
here is a generated list without source files and no samsung printer ppa
#### Yuuguu - http://yuuguu.com
deb http://update.yuuguu.com/repositories/apt hardy multiverse
Richard W. Seitz
fuente
2

Aquí está mi script, " list-apt-repositories", que enumera todos los repositorios en " /etc/sources.list"y" /etc/sources.list.d/*.list". Puede agregar --ppa-onlypara mostrar solo los PPA. Los PPA se transforman automáticamente al ppa:USER/REPOformato.

Las partes relevantes son las 5 líneas list_sourcesy list_ppafunciones, el resto es solo repetitivo para envolverlo en un útil script de shell.

list-apt-repositories:

#!/bin/sh

usage () {
  cat >&2 <<USAGE
$0 [--ppa-only]

Options:
  --ppa-only            only list PPAs
USAGE
  exit $1
}

list_sources () {
  grep -E '^deb\s' /etc/apt/sources.list /etc/apt/sources.list.d/*.list |\
    cut -f2- -d: |\
    cut -f2 -d' ' |\
    sed -re 's#http://ppa\.launchpad\.net/([^/]+)/([^/]+)(.*?)$#ppa:\1/\2#g'
}

list_ppa () {
  list_sources | grep '^ppa:'
}

generate=list_sources

while test -n "$1"
do
  case "$1" in
    -h|--help) usage 1;;
    --ppa-only) generate=list_ppa;;
    *)
      printf -- "Unknown argument '$1'\n" >&2
      usage 2
    ;;
  esac
  shift
done

$generate

Y para hacer una secuencia de comandos de instalación, vaya a otra secuencia de comandos " make-apt-repository-install-script". El script generado admite el argumento -y/ --yespara uso no interactivo (ver add-apt-repository(1)).

make-apt-repository-install-script:

#!/bin/sh

if test -n "$1"
then
  cat >&2 <<USAGE
Usage: $0 < PATH_TO_LIST_OF_REPOS
       list-apt-repositories [--ppa-only] | $0

No options recognized.

Reads list of repositories from stdin and generates a script to install them
using \`add-apt-repository(1)\`. The script is printed to stdout.

The generated script supports an optional
\`-y\` or \`--yes\` argument which causes the \`add-apt-repository\` commands
to be run with the \`--yes\` flag.
USAGE
  exit 1
fi

cat <<INSTALL_SCRIPT
#!/bin/sh
y=
case "\$1" in
  -y|--yes) y=\$1;;
  '') y=;;
  *)
    printf '%s\n' "Unknown option '\$1'" "Usage: \$0 [{-y|--yes}]" >&2
    exit 1
  ;;
esac
INSTALL_SCRIPT

xargs -d'\n' printf "add-apt-repository \$y '%s'\n"

Una vez más, la parte importante es el xargscomando en la última línea, el resto es repetitivo.

ejm
fuente
1

Para que agregue líneas ppa.launchpad.net como ppa: $ USER / $ PPA. Agregue otros repositorios con su línea completa de archivos * .list. No hay líneas de engaño.

#! / bin / bash
# My ~ / bin / mk_repositories_restore_script
mkdir -p ~ / bin 
x = ~ / bin / restore_repositories
echo \ # \! / bin / bash> $ x
chmod u + x $ x
(
 para APT en $ (find / etc / apt / -name \ *. list)
    do sed -n -e '/ ^ deb / {
     /ppa\.launchpad/s/\(.*\/\/[^\/font>*.\)\([^ \ t] * \) \ (. * $ \) / sudo apt-add-repository ppa : \ 2 / p;
     /ppa\.launchpad/!s / \ (deb [\ t] * \) \ (. * $ \) / sudo apt-add-repository \ 2 / p;
    } '$ APT
 hecho
) | ordenar | uniq | tee -a ~ / bin / restore_repositories
BobDodds
fuente
0

Gracias BobDodds!
Si alguien está interesado, he actualizado un poco su código (espero que no le importe).
Este script escribirá solo los PPA agregados por el usuario (/etc/apt/sources.list.d).

    #!/bin/bash
    # My ~/bin/mk_repositories_restore_script
    mkdir -p ~/bin
    x=~/bin/restore_repositories
    echo \#\!/bin/bash > $x
    chmod u+x $x
    (
    for APT in $( find /etc/apt/ -name \*.list )
    do sed -n -e '/^deb /{
          /ppa\.launchpad/s/\(.*\/\/[^\/]*.\)\([^ \t]*\)\(.*\/ubuntu.*$\)/ppa:\2/p;                                                                                                                                                                                       
        }' $APT
    done
    ) | sort | uniq | tee -a ~/bin/restore_repositories
Martin Bortel
fuente
0
sed -r -e '/^deb /!d' -e 's/^([^#]*).*/\1/' -e 's/deb http:\/\/ppa.launchpad.net\/(.+)\/ubuntu .*/ppa:\1/' -e "s/.*/sudo add-apt-repository '&'/" /etc/apt/sources.list /etc/apt/sources.list.d/*

Sin embargo, eso no genera comandos para habilitar posibles repositorios de origen (deb-src).

jarno
fuente
-1

Instalar en pc ppa-purge

apt install ppa-purge

Luego obtenga la lista de ppa por finalización de pestaña ...

ppa-purge -o(presione la Tabtecla dos veces)

Jason Nosaj
fuente
2
Eso es un poco al revés. ¿Cómo sugiere que OP recopile la salida de finalización de shell para almacenamiento o procesamiento? Además, ppa-purgeno tiene -obandera según su página de manual . -1
David Foerster