#bash #cygwin
#bash #cygwin
Вопрос:
commonMongo=s:/programs/mongodb/
dbpath=$commonMongo"data/"
logFile=$commonMongo"log.txt"
mongoProg=s:/programs/mongodb/mongodb/
mongoBin=$mongoProg"bin/"
mongod=$mongoBin"mongod.exe"
a=$1
if [ "$a" == "start" ];then
"${mongod} --logpath ${logFile} --logappend --dbpath ${dbpath} amp;"
elif [ "$a" == "repair" ];then
"${mongod} --dbpath ${dbpath} --repair"
else
echo "Incorrect usage"
fi
./init.sh : строка 11: s:/programs/mongodb/mongodb/bin/mongod.exe —dbpath s:/programs/mongodb/data / —repair: нет такого файла или каталога
Вызов печатной команды работает нормально:
s:/programs/mongodb/mongodb/bin/mongod.exe —dbpath s:/programs/mongodb/data / —ремонт
Комментарии:
1. Исправлено, не заключая команду в двойные кавычки.
2. Вы все равно должны переносить отдельные переменные `»$ {mongod}»‘ amp; ‘»$ {logFIle}»‘, если они могут содержать пробелы, но да, целая строка в одном наборе кавычек вызовет ошибку, которую вы видели
Ответ №1:
Cygwin действительно сотворит для вас волшебство, если вы, например, заключите свои пути DOS в кавычки
cd "C:Program Files"
Ответ №2:
Cygwin не распознает буквы дисков Windows, такие как s:
, используйте /cygdrive/s
вместо. Ваша команда cygwin должна выглядеть следующим образом:
/cygdrive/s/programs/mongodb/mongodb/bin/mongod.exe --dbpath s:/programs/mongodb/data/ --repair
Обратите внимание, что параметры, подобные пути, которые вы передаете исполняемому файлу, находятся в формате Windows, поскольку mongod.exe
не являются двоичным файлом Cygwin.
Чтобы упростить задачу, вы могли бы добавить mongod.exe
свой путь, тогда вам не нужно указывать каталог, в котором он находится.
Комментарии:
1. Спасибо, я знаю об этом, но это не то, что вызвало проблему.