59

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

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

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

15 ответов15

69

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

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

13

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

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

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

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

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

10

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

sh runide.sh

или же

sudo sh runide.sh

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

5

Вы пытаетесь заправить свою машину апельсиновым соком вместо бензина. Windows совместно использует аналогичные команды, хранящиеся в файлах .bat или .cmd, со сценариями оболочки Unix/Linux/zOS Unix Subsystem/* ix, так как эти два семейства операционных систем имеют общего предка машин 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. Поместите его на флешку для этих особых случаев.

3

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

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

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

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

2

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

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

2

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

  • Скачайте и установите .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'

1

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

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

1

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

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

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

1

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

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

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

0

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

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

0

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

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

0

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

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

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

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

0

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

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

chmod +x myscript.sh
./myscript.sh

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .