Як виконати .sh файл у Windows?


67

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

"." не розпізнається як внутрішня чи зовнішня команда, керований чи пакетний файл

будь ласка, допоможіть мені виконати .sh файл

Відповіді:


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 не знає, що таке скрипт, і знову це справа Linux. Ви можете вирішити це, встановивши Cygwin, якщо дійсно хочете або потрібно запустити скрипт sh.

Однак, судячи з одного з ваших попередніх коментарів, ви можете так само добре перейменувати сценарій в name.bat та видалити рядок "#! / Bin / sh". Тепер у вас є Batch-файл, який має розуміти Windows. Більше про пакетні файли ви можете прочитати тут .


12

Крім того, ви можете звернутися до темної сторони та встановити Linux. З підказки:

sh runide.sh

або

sudo sh runide.sh

Ваша програма буде працювати, і ви також матимете кращу систему.


15
Це як сказати: "Просто розбагатійте і заплатіть комусь зробити це за вас"
Funkodebat

7

Найкраще рішення на мій погляд:

  • Завантажте та встановіть .git для Windows

  • Клацніть правою кнопкою миші на робочому столі та скажіть "git bash here"

  • Виконайте свій сценарій, як в unix

  • Готово!

Увага: багато команд не працюватимуть на windows! Але все-таки багато основного матеріалу спрацює.

Якщо вам потрібен цей сценарій регулярно, ви можете створити ярлик (на робочому столі, наприклад):

  • Створіть ярлик до mintty.exeна робочому столі

  • Відредагуйте властивості ярлика та змініть ціль (збережіть шлях):

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


Це не працює. Коли я запускаю @FOR / f "tokens = *"% i IN ('docker-machine env - стандартний cmd за замовчуванням') DO @% i. Я отримую несподіваний жетон (
Стів Томлін

5

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

Якщо ви хочете миттєвого задоволення, вам потрібно буде встановити середовище, яке забезпечує програму "sh.exe" або "csh.exe" або "bash.exe" (кого-небудь tsh.exe?)

Крім того, якщо ви знаєте команди скриптів Unix, дуже добре, і ви знаєте команди Windows .cmd і .bat файли, дуже добре, ви можете перевести .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


1
Більш конкретно, встановити Git. Єдина причина встановлення Github для Windows містить оболонку Bash - це те, що вона поставляється з Git. :)
ZaLiTHkA

Хороша альтернатива, дякую, тому не потрібно встановлювати більше інструментів. +1
Guilherme Nascimento

1

Я знайшов інше і просте рішення під назвою UnixUtil .

Завантажте та розпакуйте його на C: drive. Встановіть змінну середовища 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- bash-shell-on-windows-10 /

Зауважте, що для цього потрібно активувати перемикач «Режим розробника» та ввімкнути опцію «Підсистема Windows для Linux (Beta)».

Для себе я виявив, що встановлення Git для Windows (що я все одно використовую) є достатнім.


1

Це стара тема, але для тих, хто працює з ОС Windows 10. Просто відкрийте вікна функцій на панелі керування "Увімкнення та вимкнення функцій 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, або навантаження возитися з непридатними засобами може зробити щось, що може працювати і в обох, але якщо ви АБСОЛЮТНО впевнені, що навколишнє середовище завжди те саме, головний біль


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

Другий абзац охоплює той факт, що його, без певного обсягу роботи, швидше за все не вийде.
Подорожник Geek

Ну, ти маєш рацію.
Каміло Мартін

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" Це, безумовно, запустить вам сценарій оболонки. Щасливе навчання
Шрідхар GV

питання було не про формат файлу, а про відсутність оболонки у Windows.
Архемар

0

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

Після виконання виконуваного сценарію можна запускати звичайний спосіб зсередини bash, наприклад:

chmod +x myscript.sh
./myscript.sh

Якщо ви хочете запустити сценарій безпосередньо з Windows, ви можете створити ярлик у тому самому каталозі і встановити "Ціль" на щось подібне:

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

Якщо шлях вашого сценарію відповідає розташуванню ярлика (як, наприклад, приклад вище), переконайтеся, що поле "Почати в" також порожнє.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.