Bash на cygwin: нет такого файла или каталога

#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. Спасибо, я знаю об этом, но это не то, что вызвало проблему.