The following is a fragment of a bash script that I'm running under cygwin on Windows:
deployDir=/cygdrive/c/Temp/deploy
timestamp=`date +%Y-%m-%d_%H:%M:%S`
deployDir=${deployDir}/$timestamp
if [ ! -d "$deployDir" ]; then
echo "making dir $deployDir"
mkdir -p $deployDir
fi
This produces output such as:
making dir /cygdrive/c/Temp/deploy/2010-04-30_11:47:58
mkdir: missing operand
Try `mkdir --help' for more information.
However, if I type /cygdrive/c/Temp/deploy/2010-04-30_11:47:58
on the command-line it succeeds, why does the same command not work in the script?
Thanks, Don
You can't have colons in file names on Windows, for obvious reasons.
Change:
to
Like most Unix shells (maybe even all of them), Bourne (Again) Shell (sh/bash) is case-sensitive. The dir var is called
deployDir
(mixed-case) everywhere except for themkdir
command, where it is calleddeploydir
(all lowercase). Sincedeploydir
(all lowercase) is a considered distinct variable fromdeployDir
(mixed-case) anddeplydir
(all lowercase) has never had a value assigned to it, the value ofdeploydir
(all lowercase) is empty string ("").Without the quotes (
mkdir $deploydir
), the line effectively becomesmkdir
(just the command without the required operand), thus the errormkdir: missing operand
.With the quotes (
mkdir "$deploydir"
), the line effectively becomesmkdir ""
(the command to make a directory with the illegal directory name of empty string), thus the errormkdir: cannot create directory
'.Using the form with quotes (
mkdir "$deployDir"
) is recommended in case the target directory name includes spaces.Change:
to