ошибка mkdir в скрипте bash - PullRequest
       12

ошибка mkdir в скрипте bash

13 голосов
/ 30 апреля 2010

Ниже приведен фрагмент скрипта bash, который я запускаю под cygwin в 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

Это приводит к выводу, например:

making dir /cygdrive/c/Temp/deploy/2010-04-30_11:47:58
mkdir: missing operand
Try `mkdir --help' for more information.

Однако, если явведите /cygdrive/c/Temp/deploy/2010-04-30_11:47:58 в командной строке, это успешно, почему эта же команда не работает в сценарии?

Спасибо, Дон

Ответы [ 3 ]

30 голосов
/ 30 апреля 2010

Изменение:

mkdir -p $deploydir

до

mkdir -p "$deployDir"

Как и большинство оболочек Unix (возможно, даже всех), оболочка Bourne (Again) (sh / bash) чувствительна к регистру. Dir var везде называется deployDir (смешанный регистр), за исключением команды mkdir, где он называется deploydir (все строчные буквы). Поскольку deploydir (все строчные буквы) считаются отличной от deployDir (смешанный регистр), а deplydir (все строчные буквы) никогда не имели присвоенного ему значения, значение deploydir (все строчные буквы) пустая строка ("").

Без кавычек (mkdir $deploydir) строка фактически становится mkdir (просто команда без требуемого операнда), таким образом, ошибка mkdir: missing operand.

С кавычками (mkdir "$deploydir") строка фактически становится mkdir "" (команда для создания каталога с недопустимым именем каталога пустой строкой), таким образом, ошибка mkdir: cannot create directory '.

Рекомендуется использовать форму с кавычками (mkdir "$deployDir"), если имя целевого каталога содержит пробелы.

9 голосов
/ 30 апреля 2010

Изменение:

mkdir -p $deploydir

до

mkdir -p "$deploydir"
1 голос
/ 30 апреля 2010

Вы не можете иметь двоеточия в именах файлов в Windows по понятным причинам.

...