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

67

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

"" не распознается как внутренняя или внешняя команда, рабочий или пакетный файл

пожалуйста, помогите мне выполнить файл .sh

Broam
источник

Ответы:

74

Вы находитесь на Windows CMD.EXE (из сообщения об ошибке). Он использует другой синтаксис для выполнения команд. Вам нужно будет использовать sh name.sh, предполагая, что у вас установлен Cygwin или аналогичный.

Для пояснения, в Windows нет встроенной утилиты для поддержки файлов .sh. Чтобы запустить такой, вам нужно установить сторонний инструмент, такой как Cygwin .

Роджер Липскомб
источник
7
Не могли бы вы также не просто установить Git на Windows? Кажется, что это добавляет поддержку сценариев оболочки, даже если эти сценарии оболочки не выполняют задачи, связанные с Git.
DaveTheMinion
2
@DavidB Да, это работает, если вы поместите C: \ Program Files (x86) \ Git \ bin (или что-то еще на вашем компьютере) в PATH, потому что Git помещает туда все виды полезных инструментов, включая sh.exe
Sumyrda
1
@DavidB Да, Git Bash знает, что с этим делать, правильно!
Легенды
13

Вы пытаетесь запустить команду Linux в командной строке Windows.

В Linux косая черта является разделителем пути. В Windows обратная косая черта является разделителем пути, а прямая косая черта обычно указывает на аргумент.

Поэтому Windows считает, что вы пытаетесь запустить команду с именем «.» и синтаксический анализ аргумента "/name.sh". Правильное соглашение будет ". \ Name.sh". Кроме того, Windows автоматически выполнит поиск вашей команды в текущем каталоге, чтобы вы могли просто ввести «name.sh».

Следующая проблема, с которой вы столкнетесь, заключается в том, что Windows не знает, что такое sh-скрипт, опять же, это Linux. Вы можете решить эту проблему, установив Cygwin, если вы действительно хотите или вам нужно запустить скрипт sh.

Однако, судя по одному из ваших предыдущих комментариев, вы также можете переименовать скрипт в name.bat и удалить строку «#! / Bin / sh». Теперь у вас есть пакетный файл, который Windows должна понимать. Вы можете прочитать больше о пакетных файлах здесь .

Мартин Фидо
источник
12

В качестве альтернативы вы можете перейти на темную сторону и установить Linux. Из приглашения:

sh runide.sh

или же

sudo sh runide.sh

Ваша программа будет работать, и у вас будет лучшая система.

Стив
источник
15
Это все равно, что сказать: «Просто разбогатей и заплати кому-нибудь, чтобы он сделал это за тебя»
Funkodebat
7

Лучшее решение на мой взгляд:

  • Загрузите и установите .git для Windows

  • Щелкните правой кнопкой мыши на рабочем столе и скажите «git bash here»

  • Выполните ваш скрипт, как в Unix

  • Готово!

Внимание: многие команды не будут работать на окнах! Но все же многие основные вещи будут работать.

Если вам нужен этот скрипт регулярно, вы можете создать ярлык (например, на рабочем столе):

  • Создайте ярлык для mintty.exeрабочего стола

  • Отредактируйте свойства ярлыка и измените цель (оставьте путь):

  • C:\Program Files\Git\usr\bin\mintty.exe" -h always /bin/bash -l -e 'D:\folder\script.sh'

Heanz
источник
Это не работает. Когда я запускаю @FOR / f "tokens = *"% i IN ('docker-machine env --shell cmd default') DO @% i. Я получаю неожиданный токен (
Стив Томлин
5

Вы пытаетесь заправить свою машину апельсиновым соком вместо бензина. Windows совместно использует аналогичные команды, хранящиеся в файлах .bat или .cmd, со сценариями оболочки Unix / Linux / zOS Unix / * ix для Unix / Linux / zOS, поскольку эти два семейства операционных систем имеют общего предка машин DEC PDP-x.

Если вы хотите получить мгновенное вознаграждение, вам необходимо установить среду, в которой есть программа «sh.exe» или «csh.exe» или «bash.exe» (кто-нибудь из tsh.exe?)

В качестве альтернативы, если вы хорошо знаете команды сценариев Unix и хорошо знаете команды Windows .cmd и .bat file, вы можете преобразовать файл .sh в файл .bat или .cmd. Тем не менее, вы часто будете встречать больше Unix-стилевых программ, не имеющих аналогов в Windows - grep, sed, vi, emacs и т. Д. Таким образом, вызов для установки CygWin (без минимализма) - просто для того, чтобы получить оболочку и Unix инструменты. Поместите его на флешку для этих особых случаев.

JM
источник
3

Кто-то сказал что-то об использовании MS-DOS /для команд и \путей. Это немного вводит в заблуждение. Посмотрите на мой пример:

C:\myfoo\foo\>cd../.. 
C:\myfoo\foo\>cd..\..

Не имеет разницы в действии. Да, это не так для всех операций - фактический ответ - просто Нет , или без Cygwin или SSHD вы не сможете.

Я только знаю , потому что я тупо потратил полдня , пытаясь выяснить , что if then fiи eval, execделать с -Djava.somethingпри вызове.

grizzleybear123
источник
2

Используйте Github для Windows. Он содержит все исполняемые файлы среды Unix.

https://github-windows.s3.amazonaws.com/GitHubSetup.exe

Nederealm
источник
1
Более конкретно, установите Git. Единственная причина установки Github для Windows - это оболочка Bash, потому что она поставляется с Git. :)
ZaLiTHkA
Хорошая альтернатива, спасибо, поэтому не нужно устанавливать больше инструментов. +1
Гильерме Насименто
1

Я нашел другое и простое решение под названием UnixUtil .

Загрузите и разархивируйте его на диск C :. Установите переменную среды pathдля включения C:\UnixUtils\usr\local\wbin.

Это важно. НЕ устанавливайте путь кC:\UnixUtils\bin

Прабханджан Дешпанде
источник
1

Для полноты картины хочу упомянуть новую функцию «Подсистема Windows для Linux» для Windows 10. Подробности описаны в http://www.howtogeek.com/249966/how-to-install-and-use-the-linux- Баш-оболочки на окнах-10 /

Обратите внимание, что для этого необходимо активировать переключатель «Режим разработчика» и включить опцию «Подсистема Windows для Linux (бета-версия)».

Для себя я обнаружил, что установки Git для Windows (которую я использую в любом случае) достаточно.

Майкл Фрейдгейм
источник
1

Это старая тема, но для тех, кто работает под управлением Windows 10. Просто откройте функции Windows на панели управления «Включение или отключение функций Windows»

Выберите функцию «Подсистема Windows для Linux». После установки у вас есть «Bash», и вы даже можете настроить собственные серверы Linux в Bash. И конечно, команда sh в bash тоже работает.

Эгберт
источник
0

Вполне возможно, что проблема на самом деле находится внутри файла name.sh- вы пытаетесь использовать .команду, но она пытается запустить своего рода оболочку (например csh, я думаю), в которой это недопустимая команда.

Итак: name.shначинается ли с правильного #!/bin/sh(если вы на самом деле пытаетесь запустить sh)?

Эндрю Джаффе
источник
1
да, он запускается #! / bin / sh cd D: \ Raghu D: winzip32.exe -min -a -r D: \ p вот содержимое файла
0

хорошо, в этом есть ОЧЕНЬ много неправильного - удалите #! / bin / sh и измените расширение на bat, и это может сработать еще с несколькими исправлениями. Затем вы можете просто вызвать его по имени файла.

Синтаксис сценария оболочки Unix и командного файла Windows не слишком похожи. Cygwin, или куча возни с unxutils может сделать что-то, что будет работать в обоих случаях, но если вы АБСОЛЮТНО не уверены, что среда всегда одинакова, это не стоит головной боли

Подмастерье Компьютерщик
источник
drop the #!/bin/sh, and change the extention to bat, and it might work with a few more fixes.Какая?! Я подозреваю, что вы никогда не пробовали это ... В Windows даже самые простые возможности bash не поддерживаются или требуют длительного синтаксиса.
Камило Мартин
Второй абзац охватывает тот факт, что его, скорее всего, не получится, без изрядного количества работы.
подмастерье Компьютерщик
Ну, ты прав.
Камило Мартин
0

Если у вас дома (или на работе) установлен Linux и он подключен к той же сети, и эта сеть безопасна, это может помочь:

  1. Создать общий доступ к папкам в Windows (довольно просто, но убедитесь, что сеть защищена от вторжений).
  2. Смонтируйте его в Linux с помощью mount //WinMachine/Share LinuxFolder(IIRC и требует Samba ).
  3. Используя что-то вроде PuTTY , войдите в систему удаленно в эту коробку Linux.
  4. Запустите вашу команду в смонтированной папке.
Камило Мартин
источник
0

Запустить скрипт оболочки из windows. Сначала используйте команду: dos2unix, затем вы можете использовать обычную команду: sh runide.sh

Это сработает.

Шридхар Г.В.
источник
Извините, небольшая коррекция должна быть сделана. Используйте команду: "dos2unix runide.sh" Вывод: dos2unix: конвертирование файла runide.sh в формат UNIX, затем вы используете команду: "sh runide.sh" Это обязательно запустит ваш скрипт оболочки. Счастливого обучения
Шридхар Г.В.
Вопрос был не в формате файла, а в отсутствии оболочки в Windows.
Архемар
0

Несмотря на то, что существующие ответы здесь были правильными в то время, Windows 10 имеет в настоящее время необязательно включать в себя модифицированную версию Ubuntu работает полный Баш оболочку .

После того, как скрипты станут исполняемыми, они могут запускаться обычным способом изнутри bash, например:

chmod +x myscript.sh
./myscript.sh

Если вы хотите запустить скрипт прямо из Windows, вы можете создать ярлык в том же каталоге и установить для «Target» что-то вроде:

C:\Windows\System32\bash.exe -c "./myscript.sh"

Если путь вашего скрипта относительно местоположения ярлыка (как в примере выше), убедитесь, что поле «Начать с» также пустое.

Molomby
источник