if [ "$(which gimp)" != ""]
]
deve ser o último argumento do comando [
, e deve ser um argumento separado, portanto você precisa de um espaço antes dele. Veja Bash Pitfall 10 .
Mas não use which
. É um comando externo não padrão que procura um arquivo no PATH. Ele se comporta de maneira diferente em sistemas diferentes e você não pode depender de uma saída útil ou do status de saída. O shell já fornece melhores maneiras de verificar se existe um comando e funcionará de forma consistente em qualquer sistema, para melhor aprendê-los. Veja FAQ do Bash 81 . Neste caso, porém, você não precisa testar se o gimp existe, apenas executando gimp -version
, ou consultando o dpkg sobre a versão do pacote gimp (veja dpkg-query(1) ), já informará se existe ou não.
if [ "$(gimp -version)" != 2.8 ]
A AndAC já deu uma solução para esta, mas eu vou fornecer outra; comparando os números da versão. O dpkg fornece uma maneira de comparar duas versões, a saber, dpkg --compare-versions ver1 op ver2
. Por exemplo. dpkg --compare-versions 2.6.12 '<' 2.8.0-1ubuntu0ppa6~precise
retornará true desde que a versão 2.6.12 é mais antiga que 2.8.0-1ubuntu0ppa6 ~ precision. Veja dpkg (1) .
Todos os colchetes ( {
e }
) nesse script são inúteis, não servem a nenhum propósito, então você também pode removê-los.
Colocando tudo isso junto:
#!/usr/bin/env bash
# Query dpkg to get the version of the currently installed gimp package.
# The command returns false if the package is not installed.
if version=$(dpkg-query -W -f='${Version}' gimp 2>/dev/null); then
# Check if it's older than 2.8
if dpkg --compare-versions "$version" '<' 2.8; then
apt-get remove gimp || exit
else
printf 'Looks good.\n'
exit
fi
fi
add-apt-repository ppa:otto-kesselgulasch/gimp &&
apt-get update &&
apt-get install gimp