Download CURL and GREP Explanation
So, it is all piped together which causes the command to be executed from left to right something like this:
- curl is run up to first | to get the latest web data from releases html page.
- then grep is used to find “browser_download_url”
- This returns many of them so the next grep is used to clean this up more
- “browser_download_url”…checksums.txt”
- …
- …
- “browser_download_url”…docker-compose-windows-x86_64.exe”
- “browser_download_url”…compose-windows-x86_64.exe.sha256”
- “browser_download_url”…LICENSE”
- in all the returned data find
"docker-compose-$(uname -s)-$(uname -m)\"$"
with case insensitivity- $(uname -s) returns Linux in my case
- $(uname -m) returns x86_64
- In the download URL they are all lower case that is why I added the -i for case insensitivity
- \”$ is there because there are two results still one for the binary and one for the checksum file and I only wanted the binary. This command look for a quote at the end of the string
- the returned data without the \”$
- …docker-compose-linux-x86_64″
- …docker-compose-linux-x86_64.sha256″
- \” – looks for a literal quote \ tells grep and for that matter Linux the next character is to be taken literally and not treated as a delimiter.
- $ – this tells grep to search at the end of the line this eliminating the other entry with the added extension.
- the returned data without the \”$
- So with all of that it will download only the binary compatible with your linux flavor as long as docker-compose has the proper lables listed for $(uname -s) and $(uname -m) . So, this worked for me and I hope it is as clear as mud!
- It is possible to do
echo "docker-compose-$(uname -s)-$(uname -m)\""
to see if the output is close to what is expected - Then run
curl -s https://api.github.com/repos/docker/compose/releases/latest | grep browser_download_url
to see if there is a line that will match your expected output. - Also, can combine the greps like this
curl -s https://api.github.com/repos/docker/compose/releases/latest | grep browser_download_url | grep -i "docker-compose-$(uname -s)-$(uname -m)"
- Note: two lines should return as this does not filter on \”$
- It is possible to do
1 2