16

I was wondering what is the purpose of piping the downloaded file by curl into sudo -E bash - in the following shell:

curl -sL https://deb.nodesource.com/setup_5.x | sudo -E bash -

youssef
  • 353

3 Answers3

15

It's a short way of executing a script without having to save the file and then execute it. When you save the file and then execute it, a number of things can go wrong:

  • User didn't type the filename correctly
  • User didn't use the correct shell (maybe ran sh foo.sh instead of bash foo.sh)
  • User tried to execute the file instead of setting bash on it (./foo.sh), and forgot to set execute permissions
  • User forgot to use sudo

By providing a single command line to execute, the developers can decrease the number of places where things can go wrong due to luser error.

Personally, I despise piping curl to bash. It's not safe.

muru
  • 207,970
9

This command would download file and attempt to execute it with root privileges.

  • 5
    Thank you, but what is the pupose of -E option and - at the end of command ? – youssef Mar 11 '17 at 07:12
  • 9
    @Youssef -E preserves environment variables (say variables for proxy settings) and - tells bash to read commands from standard input, i.e., the pipe. – muru Mar 11 '17 at 07:13
2

Agreed with @muru you should not execute some random bash script from the internet.

Better option to install NPM & Node.js is to download the binary from Download | Node.js and follow the official instructions from the Node.js project.

  1. Unzip the binary archive to any directory you wanna install Node, I use /usr/local/lib/nodejs.

    sudo mkdir -p /usr/local/lib/nodejs
    # instead of XX use the version number you downloaded
    sudo tar -xJvf node-XX-XX.tar.xz -C /usr/local/lib/nodejs
    
  2. Open ~/.profile, add below to the end

    # Nodejs
    VERSION=vXX.XX.0 # <--- Put the version you downloaded
    DISTRO=linux-x64
    export PATH=/usr/local/lib/nodejs/node-$VERSION-$DISTRO/bin:$PATH
    
  3. Refresh profile

    . ~/.profile
    
  4. Check if it works

    node -v
    npm version
    
Kulfy
  • 18,163