Não posso testar o resto do seu script, pois não tenho os dados necessários e nem sei o que ele faz, mas essa linha está certamente errada:
changes="$(cat /home/$USER/.updates.log | grep http)"
Isso salvará a saída de seu comando grep
em $changes
, não o número de vezes que a string foi encontrada, mas as linhas reais retornadas. Por exemplo:
$ cat file
one http
two http
three http
$ changes=$(cat file | grep http)
$ echo "$changes"
one http two http three http
Como você pode ver acima, $changes
é apenas cada linha correspondente do arquivo concatenado em uma única variável. O que você queria era algo como (não há necessidade de cat
, a propósito, grep
pode pegar um nome de arquivo como entrada):
$ changes=$(grep -c http file)
$ echo $changes
3
A opção -c
faz grep
imprimir o número de linhas correspondentes em vez das próprias linhas. Alternativamente, você pode passar a saída através de wc -l
para contar as linhas:
changes=$(grep http file | wc -l)
Qualquer um fará e você poderá verificar se $changes
é maior que 0:
if [ "$changes" -gt 0 ]]; then
...
fi
Se você quiser exibir as alterações, use sua abordagem original, mas não a compare a 0. Em vez disso, use -z
para verificar se a variável está vazia:
changes=$(grep http /home/$USER/.updates.log)
## If $changes is empty
if [ -z "$changes" ]
then
notify-send "Found no updates; exiting..." -i gtk-dialog-info -t 1000 -u normal &
exit
else
zenity --question --text "Changes found in:\n$changes\n\nWould you like to update now?"
...
fi