flyctl does it, correctly replacing the binary in a fixed location:
$ flyctl version update
Update available 0.0.441 -> v0.1.12.
Run "flyctl version update" to upgrade.
/bin/bash -c
Running automatic update [curl -L "https://fly.io/install.sh" | sh]
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1475 0 1475 0 0 3811 0 --:--:-- --:--:-- --:--:-- 3811
######################################################################## 100,0%
set channel to shell
flyctl was installed successfully to /home/tommy/.fly/bin/flyctl
Run 'flyctl --help' to get started
Check how the implement it.