как выполнить файл .sh в windows?

<p>когда я пытаюсь выполнить файл (name.sh) в командной строке с помощью команды ./name.sh, я получаю сообщение об ошибке:</p><blockquote> <p>"" не распознается как внутренняя или внешняя команда, рабочий или пакетный файл</p> </blockquote><p>пожалуйста, помогите мне выполнить файл .sh</p>

<p>вы находитесь на windows cmd.exe (из сообщения об ошибке). он использует другой синтаксис для выполнения команд. вам нужно будет использовать <code>sh name.sh</code>, если у вас установлен cygwin или аналогичный.</p><p>для пояснения, в windows нет встроенной утилиты для поддержки файлов .sh. для запуска вам необходимо установить сторонний инструмент, такой как <a href="http://www.cygwin.com/">cygwin</a> .</p>

<p>вы пытаетесь запустить команду linux в командной строке windows.</p><p>в linux косая черта является разделителем пути. в windows обратная косая черта является разделителем пути, а прямая косая черта обычно указывает на аргумент.</p><p>поэтому windows считает, что вы пытаетесь запустить команду с именем «.» и синтаксический анализ аргумента "/name.sh". правильное соглашение будет ".\name.sh". кроме того, windows автоматически выполнит поиск вашей команды в текущем каталоге, чтобы вы могли просто ввести «name.sh».</p><p>следующая проблема, с которой вы столкнетесь, заключается в том, что windows не знает, что такое sh-скрипт, опять же, это linux. вы можете решить эту проблему, установив cygwin, если вы действительно хотите или вам нужно запустить скрипт sh.</p><p>однако, судя по одному из ваших предыдущих комментариев, вы также можете переименовать скрипт в name.bat и удалить строку «#!/bin/sh». теперь у вас есть пакетный файл, который windows должна понимать. вы можете прочитать больше о пакетных файлах <a href="http://en.wikipedia.org/wiki/batch\_file">здесь</a> .</p>

<p>в качестве альтернативы вы можете перейти на темную сторону и установить linux. из подсказки:</p><pre><code>sh runide.sh </code></pre><p>или же</p><pre><code>sudo sh runide.sh </code></pre><p>ваша программа будет работать, и у вас будет лучшая система.</p>

<p>вы пытаетесь заправить свою машину апельсиновым соком вместо бензина. windows совместно использует аналогичные команды, хранящиеся в файлах .bat или .cmd, со сценариями unix/linux/zos unix subsystem/* ix shell, поскольку эти два семейства операционных систем имеют общего предка машин dec pdp-x.</p><p>если вы хотите получить мгновенное вознаграждение, вам необходимо установить среду, в которой есть программа «sh.exe» или «csh.exe» или «bash.exe» (кто-нибудь из tsh.exe?)</p><p>в качестве альтернативы, если вы хорошо знаете команды сценариев unix и хорошо знаете команды windows .cmd и .bat file, вы можете преобразовать файл .sh в файл .bat или .cmd. тем не менее, вы часто будете встречать больше unix-стилевых программ, не имеющих аналогов в windows - grep, sed, vi, emacs и т.д. таким образом, вызов для установки cygwin (без минимализма) - просто для получения shell и unix инструменты. поместите его на флешку для этих особых случаев.</p>

<p>кто-то сказал что-то о ms-dos, используя <code>/</code> для команд и <code>\</code> для путей. это немного вводит в заблуждение. посмотрите на мой пример:</p><pre><code>c:\myfoo\foo\>cd../.. c:\myfoo\foo\>cd..\.. </code></pre><p>не имеет разницы в действии. да, это не так для всех операций - фактический ответ просто<em> нет </em>, или без cygwin или sshd вы не можете.</p><p>я знаю только потому, что тупо потратил полдня, пытаясь выяснить, что <code>if then fi</code> и <code>eval</code>, <code>exec</code> делают с <code>-djava.something</code> при вызове.</p>

<h1>лучшее решение на мой взгляд:</h1><ul> <li> <p>загрузите и установите <a href="https://git-scm.com/download/win"><strong> .git для windows </strong></a> </p> </li> <li> <p>щелкните правой кнопкой мыши на рабочем столе и скажите<strong> «git bash here» </strong></p> </li> <li> <p>выполните ваш скрипт, как в unix</p> </li> <li> <p>готово!</p> </li> </ul><p><em>осторожно: многие команды не работают на windows! но все же многие основные вещи будут работать.</em></p><p>если вам нужен этот скрипт регулярно, вы можете создать ярлык (например, на рабочем столе):</p><ul> <li> <p><strong> создать ярлык </strong>для <code>mintty.exe</code> на рабочем столе</p> </li> <li> <p><strong> изменить свойства </strong>ярлыка и изменить цель (сохранить путь):</p> </li> <li> <p><code>c:\program files\git\usr\bin\mintty.exe" -h always /bin/bash -l -e 'd:\folder\script.sh'</code></p> </li> </ul>

<p>используйте github для windows. он содержит все исполняемые файлы среды unix.</p><p> <a href="https://github-windows.s3.amazonaws.com/githubsetup.exe">https://github-windows.s3.amazonaws.com/githubsetup.exe</a> </p>

<p>это старая тема, но для тех, кто работает под управлением windows 10. просто откройте функции windows на панели управления «включение или отключение функций windows»</p><p>выберите функцию «подсистема windows для linux». после установки у вас есть «bash», и вы даже можете настроить собственные серверы linux в bash. и конечно, команда sh в bash тоже работает.</p>

<p>для полноты я хочу упомянуть новую функцию «подсистема windows для linux» для windows 10. подробности описаны в <a href="http://www.howtogeek.com/249966/how-to-install-and-use-the-linux-bash-shell-on-windows-10/">http://www.howtogeek.com/249966/how-to-install-and-use-the- linux-bash-shell-on-windows-10/</a> </p><p>обратите внимание, что для этого необходимо активировать переключатель «режим разработчика» и включить опцию «подсистема windows для linux (бета-версия)».</p><p>для себя я обнаружил, что установки git для windows (которую я использую в любом случае) достаточно.</p>

<p>я нашел другое и простое решение под названием <a href="http://sourceforge.net/projects/unxutils/">unixutil</a> .</p><p>загрузите и разархивируйте его на диск c :. установите переменную среды <code>path</code>, чтобы включить <code>c:\unixutils\usr\local\wbin</code>.</p><p>это важно. не устанавливайте путь к <code>c:\unixutils\bin</code></p>

<p>запустить скрипт shell из окон. сначала используйте команду: dos2unix, затем вы можете использовать обычную команду: sh runide.sh</p><p>это сработает.</p>

<p>хорошо, в этом есть очень много неправильного - удалите #!/bin/sh и измените расширение на bat, и это может сработать еще с несколькими исправлениями. затем вы можете просто вызвать его по имени файла.</p><p>синтаксис сценария оболочки unix и командного файла windows не слишком похожи. cygwin, или куча возни с unxutils может сделать что-то, что будет работать в обоих случаях, но если вы абсолютно не уверены, что среда всегда одинакова, головная боль не стоит</p>

<p>если у вас дома (или на работе) установлен linux и он подключен к той же сети, и эта сеть безопасна, это может помочь:</p><ol> <li>создать общий доступ к папкам в windows (довольно просто, но убедитесь, что сеть защищена от вторжений).</li> <li>смонтируйте его в linux с помощью <code>mount //winmachine/share linuxfolder</code> (iirc и требует <a href="http://www.samba.org/">samba</a> ).</li> <li>используя что-то вроде <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/">putty</a> , войдите в систему удаленно в эту коробку linux.</li> <li>запустите вашу команду в смонтированной папке.</li> </ol>

<p>возможно, проблема действительно в файле <code>name.sh</code> - вы пытаетесь использовать команду <code>.</code>, но она пытается запустить своего рода shell (например, <code>csh</code>, я думаю), в котором эта команда недопустима.</p><p>итак: <code>name.sh</code> начинается с правильного <code>#!/bin/sh</code> (если вы на самом деле пытаетесь запустить <code>sh</code>)?</p>

<p>хотя существующие здесь ответы были правильными в то время, windows 10<em> делает </em>теперь опционально включает <a href="https://msdn.microsoft.com/en-us/commandline/wsl/about">модифицированную версию ubuntu с полной оболочкой bash</a> .</p><p>после того, как скрипты станут исполняемыми, они могут запускаться обычным способом изнутри bash, например:</p><pre><code>chmod +x myscript.sh ./myscript.sh </code></pre><p>если вы хотите запустить скрипт прямо из windows, вы можете создать ярлык в том же каталоге и установить для «target» что-то вроде:</p><pre><code>c:\windows\system32\bash.exe -c "./myscript.sh" </code></pre><p>если путь вашего скрипта относительно местоположения ярлыка (как в примере выше), убедитесь, что поле «начать с» также пустое.</p>