3

I just started learning shell scripting so forgive me if this is too basic to ask here. I want to run this sh script (https://github.com/daid/Cura/blob/SteamEngine/package.sh). But I cant understand what this line ( BUILD_TARGET=${1:-none} ) does?

Here is the excerpt:

#!/usr/bin/env bash

set -e
set -u

# This script is to package the Cura package for Windows/Linux and Mac OS X
# This script should run under Linux and Mac OS X, as well as Windows with Cygwin.

#############################
# CONFIGURATION
#############################

##Select the build target
BUILD_TARGET=${1:-none}
#BUILD_TARGET=win32
#BUILD_TARGET=darwin
#BUILD_TARGET=debian_i386
#BUILD_TARGET=debian_amd64
#BUILD_TARGET=debian_armhf
#BUILD_TARGET=freebsd

##Do we need to create the final archive
ARCHIVE_FOR_DISTRIBUTION=1
##Which version name are we appending to the final archive
export BUILD_NAME=15.04.6
TARGET_DIR=Cura-${BUILD_NAME}-${BUILD_TARGET}

##Which versions of external programs to use
WIN_PORTABLE_PY_VERSION=2.7.2.1

When I tried to see how it works by running in Cygwin, it throws the following error,

$ bash package.sh
package.sh: line 2: $'\r': command not found
: invalid option 3: set: -
set: usage: set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]
: invalid option 4: set: -
set: usage: set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]
package.sh: line 5: $'\r': command not found
package.sh: line 8: $'\r': command not found
package.sh: line 12: $'\r': command not found
package.sh: line 21: $'\r': command not found
package.sh: line 27: $'\r': command not found
package.sh: line 30: $'\r': command not found
package.sh: line 48: syntax error near unexpected token `$'{\r''
'ackage.sh: line 48: `{

What I am missing in Cygwin?

Update 1 : I solved 'command not found' by converting the line endings to unix compatible ones. More can be found here, '\r': command not found - .bashrc / .bash_profile

Community
  • 1
  • 1
PraveenMax
  • 717
  • 9
  • 18
  • 1
    What program did you create `package.sh` with? Notepad? The reason for all of the `package.sh: line foo: $'\r': command not found` errors is because Window's new line escape characters are `\r\n` while the Linux new line escape character is just `\n`. So `bash` parses the `\n` escape just fine but doesn't know what to do with the `\r` escape. – Jonny Henly Jul 08 '16 at 07:27
  • @JonnyHenly : Solved it few mins ago. Just saw your comment. Anyway, thanks – PraveenMax Jul 08 '16 at 07:53

1 Answers1

6

$1 is the first command line argument

${1:-none} means if the first command line argument is unset or null, "none" is substituted.
Otherwise, the value of the first command line argument is substituted.


For more info, check [ shell parameter expansion ].

sjsam
  • 21,411
  • 5
  • 55
  • 102