What is the meaning of combined commands `curl` + `apt-key add`?

While installing Heroku CLI there's a command I encountered. Here is the command:

curl -L https://cli-assets.heroku.com/apt/release.key | sudo apt-key add -

What does it mean and how does it work?


Solution 1:

curl is a utility to download something from a link. By default, it writes to STDOUT (ie prints stuff from the link in the terminal)

The -L option to curl means:

-L, --location
         (HTTP/HTTPS)  If the server reports that the requested page has moved to a 
         different location (indicated with a Location: header and a 3XX response 
         code), this option will make curl redo the request on the new place...

The operator | is a pipe, which passes the output of the command before it as the STDIN of the command after it.

apt-key is a utility to add trusted keys to apt for repositories. You can see what add does with man apt-key:

add <filename>
         Add a new key to the list of trusted keys. The key is read from the 
         filename given with the parameter filename or if the filename is -
         from standard input.

As it mentions, - tells apt key add that the key file should be read from STDIN, which in this case is what was piped from the curl command, so, in sum:

Download whatever is at this link, even if it has moved, and add it as a trusted APT repository key.