Як виконати .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.