Chcę napisać funkcję JavaScript, która wykona polecenia powłoki systemu ( ls
na przykład) i zwróci wartość.
Jak to osiągnąć?
javascript
Sunil Kumar Sahoo
źródło
źródło
Odpowiedzi:
Wydaje się, że wiele innych odpowiedzi tutaj rozwiązuje ten problem z perspektywy funkcji JavaScript działającej w przeglądarce. Strzelę i odpowiem zakładając, że kiedy pytający powiedział „Skrypt powłoki”, miał na myśli JavaScript zaplecza Node.js. Możliwe, że używasz commander.js do ramki swojego kodu :)
Możesz użyć modułu child_process z interfejsu API węzła. Wkleiłem poniższy przykładowy kod.
Mam nadzieję że to pomoże!
źródło
... kilka lat później ...
ES6 został zaakceptowany jako standard, a ES7 jest tuż za rogiem, więc zasługuje na zaktualizowaną odpowiedź. Jako przykład użyjemy ES6 + async / await z nodejs + babel, wymagania wstępne to:
Twój przykładowy
foo.js
plik może wyglądać następująco:Upewnij się, że masz babel:
Zainstaluj najnowsze ustawienie wstępne:
Uruchom go przez:
źródło
Nie wiem, dlaczego poprzednie odpowiedzi zawierały różnego rodzaju skomplikowane rozwiązania. Jeśli chcesz po prostu wykonać szybkie polecenie, takie jak
ls
, nie potrzebujesz async / await, callbacków ani nic. Oto wszystko, czego potrzebujesz - execSync :W celu obsługi błędów dodaj
try
/catch
blok wokół instrukcji.Jeśli uruchamiasz polecenie, którego wykonanie zajmuje dużo czasu, to tak, spójrz na funkcję asynchroniczną
exec
.źródło
Zależy to całkowicie od środowiska JavaScript. Proszę rozwinąć.
Na przykład podczas wykonywania skryptów systemu Windows wykonujesz następujące czynności:
źródło
W skrócie:
źródło
Z NodeJS jest takie proste! A jeśli chcesz uruchamiać ten skrypt przy każdym uruchomieniu serwera, możesz rzucić okiem na aplikację wiecznej usługi !
źródło
Uwaga: te odpowiedzi pochodzą z klienta opartego na przeglądarce na serwer sieciowy oparty na systemie Unix.
Uruchom polecenie na kliencie
Zasadniczo nie możesz. Bezpieczeństwo mówi, że działa tylko w przeglądarce, a jej dostęp do poleceń i systemu plików jest ograniczony.
Uruchom ls na serwerze
Możesz użyć wywołania AJAX, aby pobrać dynamiczną stronę przekazującą parametry za pośrednictwem GET.
Należy pamiętać, że stwarza to również zagrożenie dla bezpieczeństwa, ponieważ musiałbyś zrobić coś, aby upewnić się, że haker pani Rouge nie spowoduje, że Twoja aplikacja powie uruchom: / dev / null && rm -rf / ......
W skrócie, ucieczka z JS to po prostu zły, zły pomysł ... YMMV
źródło
Kolejny post na ten temat z ładnym rozwiązaniem jQuery / Ajax / PHP:
skrypty powłoki i jQuery
źródło
W IE możesz to zrobić:
źródło
Oto proste polecenie, które wykonuje
ifconfig
polecenie powłoki systemu Linuxźródło
Ta funkcja może być łatwo używana, na przykład:
źródło
Z nashornem możesz napisać taki skrypt:
i uruchom go:
źródło
Jeśli używasz npm, możesz użyć pakietu shelljs
Żeby zainstalować:
npm install [-g] shelljs
Zobacz więcej: https://www.npmjs.com/package/shelljs
źródło