Меню Рубрики

Linux node js запуск bash скрипта

Running Bash scripts from Node.js

How simple Bash scripts can add some old-school spice (and serious power) to your Node projects

Bash is legit. It’s pretty rare for a technology from the late 80’s to make it into the 21st century, and to maintain such a strong foothold to boot. Virtually ever serious engineer can work a terminal, and that almost always means Bash.

I was recently writing some client and server side code in JavaScript (with Vue 2 and Node, respectively) and, for a variety of reasons that I won’t go into, I wanted a simple way to copy my dist directory onto my server at the end of my webpack build process. Basically, I wanted to test out my code in my production environment, but still be able to code in my local development environment. (Heads up: my project isn’t officially live yet, otherwise pushing code to production in order to test it would be a terrible idea).

So I did some research and stumbled upon Node’s child_process (which you can read about here). Basically, the child_process.spawn() module lets you trigger Bash commands and scripts from right inside your Node script (in my case, inside my webpack build script). In other words, anything you can type into a terminal you can include inside a child_process.spawn() . In my case, I wanted to use Bash’s rsync program to copy my local dist folder to my server via ssh.

(Side note: there are pure JS solutions to this problem — I think ssh2 could work, for example. But honestly, I found most of them to be too verbose and complex, and they all require an npm module — I like this child_process solution because it comes out of the box with Node, it’s just a one-liner in Bash, and Bash is such a great scripting language to learn and know.)

So how do you do it? It’s pretty simple. At the end of your webpack build.js file, just insert the following:

sh is the name of the process (arbitrary), deploy.sh is the name of my Bash script file (located in same directory as build.js ), and cwd refers to the “current working directory”, which basically points out the directory that I would like the child process to run in (which is, of course, the same directory that build.js and deploy.sh reside in).

In the bash script (located in the same directory and named deploy.sh ), I have the following simple command:

The top line, #!/bin/sh simply means that this should run as a bash script. The second line is the rsync command which copies my local dist directory (which has just been built by webpack via npm run build ) to my server (I shouldn’t be accessing via root , but don’t worry, I’ll fix it before I go live 😉). Notice that if you were to run that command in the terminal, after cd ing into the correct directory, it would have the same effect.

Источник

Как запустить Bash скрипт в Linux

Как системный администратор, вполне вероятно, что вы написали несколько сценариев Bash для автоматизации вашей работы. Например, вы можете запускать сценарии Bash для резервного копирования вашей работы или для регистрации некоторых событий, происходящих на вашем сервере.

Скрипты Bash, как и скрипты, написанные на других языках программирования, могут запускаться различными способами.

В этой статье мы расскажем о всех способах запуска скрипта Bash в Linux.

Подготовка

Прежде чем вы сможете запустить ваш скрипт, вам нужно, чтобы ваш скрипт был исполняемым. Чтобы сделать исполняемый скрипт в Linux, используйте команду chmod и присвойте файлу права execute. Вы можете использовать двоичную или символическую запись, чтобы сделать ее исполняемой.

$ chmod u+x script
$ chmod 744 script

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

В некоторых дистрибутивах ваш файл будет выделен другим цветом, когда он исполняемый.

Теперь, когда ваш файл исполняемый, давайте посмотрим, как можно легко запустить скрипт Bash.

Запустить Bash скрипт из пути к скрипту

Чтобы запустить Bash скрипт в Linux, просто укажите полный путь к скрипту и укажите аргументы, которые могут потребоваться для запуска Bash скрипта.

В качестве примера, скажем, у вас есть Bash-скрипт, расположенный в вашем домашнем каталоге.

Чтобы выполнить этот скрипт, вы можете указать полный путь к скрипту, который вы хотите запустить.

# Абсолютный путь
$ /home/user/script

# Абсолютный путь с аргументами
$ /home/user/script «john» «jack» «jim»

Кроме того, вы можете указать относительный путь к скрипту Bash, который вы хотите запустить.

# Относительный путь
$ ./script

# Относительный путь с аргументами
$ ./script «john» «jack» «jim»

Таким образом вы узнали, как легко запустить Bash-скрипт в своей системе.

Запустить Bash скрипт, используя bash

Чтобы запустить скрипт Bash в вашей системе, вы должны использовать команду bash и указать имя скрипта, который вы хотите выполнить, с необязательными аргументами.

Кроме того, вы можете использовать sh, если в вашем дистрибутиве установлена утилита sh.

В качестве примера, скажем, вы хотите запустить скрипт Bash с именем script. Чтобы выполнить его с помощью утилиты bash, вы должны выполнить следующую команду

This is the output from your script!

Выполнить скрипт Bash, используя sh, zsh, dash

В зависимости от вашего дистрибутива, в вашей системе могут быть установлены другие утилиты оболочки.

Bash — интерпретатор оболочки, установленный по умолчанию, но вы можете захотеть выполнить ваш скрипт с использованием других интерпретаторов. Чтобы проверить, установлен ли интерпретатор оболочки в вашей системе, используйте команду which и укажите нужный интерпретатор.

Когда вы определили интерпретатор оболочки, который хотите использовать, просто вызовите его, чтобы легко запустить скрипт.

Запуск скрипта Bash из любого места

В некоторых случаях вы можете запускать скрипты Bash, где бы вы ни находились в вашей системе.

Чтобы запустить скрипт Bash из любой точки вашей системы, вам нужно добавить свой скрипт в переменную среды PATH.

Благодаря тому, что путь к скрипту добавлен в PATH, вы можете вызывать его там, где хотите в своей системе.

This is the output from script!

Кроме того, вы можете изменить переменную среды PATH в вашем файле .bashrc и использовать команду source для обновления вашей текущей среды Bash.

Выйдите из файла и используйте команду source для файла bashrc для внесения изменений.

Отлично! Теперь ваш скрипт может быть запущен из любой точки вашей системы.

Запуск Bash скриптов из графического интерфейса

Последний способ выполнения Bash скриптов — это использование графического интерфейса, в данном случае интерфейса GNOME.

Чтобы запустить ваши скрипты с использованием GNOME, вы должны установить в проводнике Ask what to do для исполняемых файлов.

Закройте это окно и дважды щелкните файл скрипта, который вы хотите выполнить.

При двойном щелчке вам предлагаются различные варианты: вы можете выбрать запуск скрипта (в терминале или нет) или просто отобразить содержимое файла.

В этом случае мы заинтересованы в запуске этого скрипта в терминале, поэтому нажмите на эту опцию.

Успех! Ваш скрипт был успешно выполнен

Заключение

Из этого руководства вы узнали, как легко запускать Bash скрипты в своей системе, указав путь к скрипту или интерпретаторы, доступные на вашем хосте. Вы узнали, что можете сделать это еще проще, добавив путь к скрипту в переменную среды PATH или используя существующие функции в пользовательском интерфейсе GNOME.

Источник

How to run shell script file using nodejs?

I need to run a shell script file using nodeJS that executes a set of Cassandra DB commands. Can anybody please help me on this.

inside db.sh file:

4 Answers 4

You can execute any shell command using the shelljs module

You could use «child process» module of nodejs to execute any shell commands or scripts with in nodejs. Let me show you with an example, I am running a shell script(hi.sh) with in nodejs.

hi.sh

node_program.js

Here, when I run the nodejs file, it will execute the shell file and the output would be:

output

You can execute any script just by mentioning the shell command or shell script in exec callback.

Hope this helps! Happy coding 🙂

to run a command in your $SHELL.
Or go

to run a file WITHOUT a shell.
Or go

which is the same as cp.exec() but doesn’t look in the $PATH.

to run a javascript file with node.js, but in a child process (for big programs).

You might also have to access stdin and stdout with event listeners. e.g.:

Also, you can use shelljs plugin. It’s easy and it’s cross-platform.

Источник

Установка node.js на Linux, FreeBSD, Windows

Важное замечание.

В первую очередь хочу обратить внимание на то, что с развитием node.js его синтаксис менялся, порой несколько раз. В связи с этим, категорически не рекомендую использовать старые версии node, проскальзывающий недавно node.NET, и подобные сборки. Идеально — версия 0.1.90 или новее. По той же причине будьте внимательны при нахождениии в сети туториалов по установке. Те, что начинаются с wget http://s3.amazonaws… загрузят устаревшую версию.
Перед установкой убедитесь в том, что python установлен, он нужен для конфигурации и сборки с помощью make (актуально для всего, кроме Windows в некоторых случаях).

GNU/Linux

Лучше было бы собрать как минимум при помощи checkinstall
checkinstall —fstrans=no —install=no —pkgname=node.js —pkgversion «0.1.97» —default

Логика подсказывает, что под MacOS установка будет аналогичной, проверить не могу. Разработчики тестируют своё детище на MacOS, работать должно без проблем.

FreeBSD

На FreeBSD чтобы не собирать libexecinfo из портов достаточно сделать:
pkg_add -r libexecinfo

Итак, классический способ#1
Способ#2
Способ#3
Способ от AterCattus

При сборке под FreeBSD 8.0_RELEASE amd64 с первого раза не собралось:
. obj/release/cpu-profiler.o(.text._ZN2v88internal23ProfilerEventsProcessor19FunctionCreateEventEPhS2_i+0x81): In function `v8::internal::ProfilerEventsProcessor::FunctionCreateEvent(unsigned char*, unsigned char*, int)’:
: undefined reference to `v8::internal::OS::ReleaseStore(long volatile*, long)’
obj/release/cpu-profiler.o(.text._ZN2v88internal23ProfilerEventsProcessor15CodeCreateEventENS0_6Logger16LogEventsAndTagsEiPhj+0xa3): more undefined references to `v8::internal::OS::ReleaseStore(long volatile*, long)’ follow
scons: *** [obj/release/mksnapshot] Error 1
scons: building terminated because of errors.
Waf: Leaving directory `/home/atercattus/node.js/node-v0.1.97/build’
Build failed: -> task failed (err #2):
libv8.a>
*** Error code 1
Помогла эта ссылка: code.google.com/p/v8/issues/detail?id=726.
Там все просто, в v8/src/platform-freebsd.cc добавляется между int OS::ActivationFrameAlignment() и const char* OS::LocalTimezone(double time) реализация недостающей функции:
void OS::ReleaseStore(volatile AtomicWord* ptr, AtomicWord value) <
__asm__ __volatile__(«». «memory»);
*ptr = value;
>
Может кому поможет.

Обновление на момент 11 июня

Вышеприведённый патч не актуален для последней версии из git — само прекрасно компилится под freebsd-amd64

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Red curtain mac os
  • Recuva для mac os
  • Recovery режим mac os
  • Recovery mode mac os sierra
  • Recovery hd mac os что это