Mowiewowie, outra prova da capacidade de supercopa apt !! Talvez esse arquivo, chamado supercow
, ajude:
#!/bin/bash
# exactly one argument
[[ $# -ne 1 ]] && echo "Usage: $( basename $0 ) PACKAGE" && exit 1
PACKAGE_DIRECTORY=$( mktemp -d ) # Target directory
PACKAGE_LOGFILE=$( mktemp ) # Target file
cd $PACKAGE_DIRECTORY || exit 1 # Exit if directory does not exist
apt_out_all=$(( apt-get --print-uris --yes install $1 ) 2>&1 )
apt_out_check=$( echo $apt_out_all | sed s/^.*information...\ // )
# error checks
if ! [[ $( echo $apt_out_check | grep "packages will be installed" ) ]]
then
echo -n "ERROR: "
if [[ "${apt_out_check%% *}" == "E:" ]]
then echo "Unable to locate package $1."
elif [[ "${apt_out_check%% *}" == "$1" ]]
then echo "$1 already installed." # look at /var/cache/apt/archives
# other, eg: Package solid is not available, but is referred to ...
else echo "${apt_out_check}"
fi
exit 1
fi
# loop through all lines: tee to file if package, wget uri if not empty
for i in $apt_out_all ; do
uri=$( echo $i | tee >(grep ".deb$" >> $PACKAGE_LOGFILE) \
| grep "^'http" | sed -e s/^\'// -e s/\'$// )
[[ $uri ]] && if ! wget $uri ; then
echo "ERROR: wget failed" ; exit 1 ; fi
done
echo "Here is the content of the logfile:" ; cat $PACKAGE_LOGFILE
echo -e "\nHere is the content of the directory:" ; ls $PACKAGE_DIRECTORY
Minha primeira tentativa foi uma grande falha porque não havia nem uma verificação de entrada de usuário maluca nem se o pacote já estava instalado. Além disso, parecia que se, por exemplo. gcc
já está instalado descarta uma string de erro e, por exemplo, geany
apenas uma linha vazia. Então eu ainda usaria com saudável suspeita, embora esta tentativa pareça muito mais sólida. Eu também apaguei cheques duplos, etc.
Exemplo: $ bash supercow kobodeluxe
#... wget messages
Here is the content of the logfile:
kobodeluxe-data_0.5.1-6_all.deb
kobodeluxe_0.5.1-6_amd64.deb
Here is the content of the directory:
kobodeluxe_0.5.1-6_amd64.deb kobodeluxe-data_0.5.1-6_all.deb
Exemplo: $ bash supercow bash
bash already installed.
Exemplo: $ bash supercow windows3.11
Unable to locate package windows3.11.
Exemplo: $bash supercow solid
ERROR: Package solid is not available, but is referred to by another package.
#...
Espero que isso ajude!
EDITAR PARA A PERGUNTA:
Em seguida, substitua grep ".deb$" >> $PACKAGE_LOGFILE
entre parênteses por grep ".deb$" | sed s/_.*// >> $PACKAGE_LOGFILE
porque não conheço um pacote oficial que contenha um sublinhado, a menos que eu esteja enganado.