Linux как запустить скрипт из другой папки

Обновлено: 05.07.2024

Вся сила Linux в использовании терминала. Это такая командная оболочка, где вы можете выполнять различные команды, которые будут быстро и эффективно выполнять различные действия. Ну впрочем, вы наверное это уже знаете. Для Linux было создано множество скриптов, которые выполняются в различных командных оболочках. Это очень удобно, вы просто объединяете несколько команд, которые выполняют определенное действие, а затем выполняете их одной командой или даже с помощью ярлыка.

2. Как работают скрипты.

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

3. Как запустить sh скрипт из командной строки?

Допустим у вас есть скрипт hello.sh состоящий из одной команды.

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

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

Для этого необходимо:

1. Указать интерпретатор внутри файла.


Содержимое скрипта hello.sh получается таким:

2. Сделать наш файл исполняемым.

Чтобы выполнить скрипт в указанной оболочке, нужно установить для него флаг исполняемости. Для этого используется команда chmod +x и имя файла скрипта:

Запуск скрипта sh в Linux:

Или полный путь от корня:

Теперь вы можете выполнить:


А если нам нужно запустить скрипт на php, то выполните:

Вот так все просто здесь работает.

Так можно запустить скрипт как фоновый процесс, используйте символ & :

Вся сила Linux в использовании терминала. Это такая командная оболочка, где вы можете выполнять различные команды, которые будут быстро и эффективно выполнять различные действия. Ну впрочем, вы наверное это уже знаете. Для Linux было создано множество скриптов, которые выполняются в различных командных оболочках. Это очень удобно, вы просто объединяете несколько команд, которые выполняют определенное действие, а затем выполняете их одной командой или даже с помощью ярлыка.

Но у новичков может возникнуть вопрос - как запустить скрипт в Linux, что для этого нужно сделать, что будет происходить и какие команды нужно выполнить. Но сначала нужно рассмотреть как работают скрипты и что такое исполняемость.

Как работают скрипты

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

Теперь о том, как работают скрипты. Это обычные файлы, которые содержат текст. Но если для них установлен атрибут исполняемости, то для их открытия используется специальная программа - интерпретатор, например, оболочка bash. А уже интерпретатор читает последовательно строку за строкой и выполняет все команды, которые содержатся в файле. У нас есть несколько способов выполнить запуск скрипта linux. Мы можем запустить его как любую другую программу через терминал или же запустить оболочку и сообщить ей какой файл нужно выполнять. В этом случае не нужно даже флага исполняемости.

Запуск скрипта sh в Linux

Сначала рассмотрим пример небольшого sh скрипта:

Вторая строка - это действие, которое выполняет скрипт, но нас больше всего интересует первая - это оболочка, с помощью которого его нужно выполнить. Это может быть не только /bin/bash, но и /bin/sh, и даже /usr/bin/python или /usr/bin/php. Также часто встречается ситуация, что путь к исполняемому файлу оболочки получают с помощью утилиты env: /usr/bin/env php и так далее. Чтобы выполнить скрипт в указанной оболочке, нужно установить для него флаг исполняемости:

chmod ugo+x script.sh

Мы разрешаем выполнять запуск sh linux всем категориям пользователей - владельцу, группе файла и остальным. Следующий важный момент - это то место где находится скрипт, если вы просто наберете script.sh, то поиск будет выполнен только глобально, в каталогах, которые записаны в переменную PATH и даже если вы находитесь сейчас в той папке где находится скрипт, то он не будет найден. К нему нужно указывать полный путь, например, для той же текущей папки. Запуск скрипта sh в linux:

Или полный путь от корня:

Если вы не хотите писать полный путь к скрипту, это можно сделать, достаточно переместить скрипт в одну из папок, которые указаны в переменной PATH. Одна из них, которая предназначена для ручной установки программ - /usr/local/bin.

cp script.sh /usr/local/bin/script.sh

Теперь вы можете выполнить:

Это был первый способ вызвать скрипт, но есть еще один - мы можем запустить оболочку и сразу же передать ей скрипт, который нужно выполнить. Вы могли редко видеть такой способ с bash, но он довольно часто используется для скриптов php или python. Запустим так наш скрипт:

А если нам нужно запустить скрипт на php, то выполните:

Вот так все просто здесь работает. Так можно запустить скрипт как фоновый процесс, используйте символ &:

Даже запустить процесс linux не так сложно.

Выводы

Как видите, запуск скрипта sh в linux - это довольно простая задача, даже если вы еще плохо знакомы с терминалом. Существует действительно много скриптов и некоторые из них вам возможно придется выполнять. Если у вас остались вопросы, спрашивайте в комментариях!

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

Это хорошая практика для запуска скриптов (BASH, Perl и т.д.) Из другого каталога? Будут ли они обычно находить все необходимое для правильной работы?

Если так, каков наилучший способ запустить "дальний" скрипт? Это

и как использовать sudo в таких случаях? Это, например, не работает:

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

Вы определенно можете сделать это (с изменениями, упомянутыми другими, такими как sudo sh /pathto/script.sh или ./script.sh ). Тем не менее, я делаю одну из нескольких вещей, чтобы запустить их в масштабе всей системы, чтобы не беспокоиться о директориях и избавить меня от лишней лишней печати.

1) Симлинк на /usr/bin

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

2) Добавьте каталог Scripts на ваш путь (используя .bash_profile - или любой другой .profile, который есть в вашей оболочке)

3) Создайте псевдонимы в .bash_profile в

/.bash_profile добавьте что-то вроде:

Как вы можете сказать, синтаксис просто псевдоним, цифры, которые вы хотите действовать как команда, команда. Таким образом, ввод "l" в любом месте терминала приведет к ls -l Если вы хотите sudo, просто alias sl="sudo ls -l" чтобы отметить для себя l vs sl (в качестве бесполезного примера).

В любом случае, вы можете просто набрать sudo nameofscript и быть в пути. Не нужно связываться с ./ или. или ш и т. д. Сначала отметьте их как исполняемые:D

Я обычно делаю так, как ты говоришь

И запустить его от имени root/superuser

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

Я обычно храню свои скрипты в /usr/local/bin или /usr/local/sbin/ (если скрипту нужны привилегии root), где, в соответствии со стандартом иерархии файловой системы (FHS), они принадлежат.

Все, что вам нужно сделать, это убедиться, что эти две директории добавлены в вашу PATH . Вы можете сделать это, отредактировав файл $HOME/.bashrc и добавив следующую строку:

Если вы хотите иметь возможность выполнять скрипт от имени root с помощью sudo , вы должны добавить эти каталоги в переменную secure_path в вашем /etc/sudoers .

Редактирование этого файла выполняется с помощью visudo что гарантирует отсутствие ошибок.

Не уверен, почему никто не предложил это, но это очень просто! Я погуглил несколько раз и не смог найти точный ответ, который я даю, поэтому я решил поделиться. IMO, но это лучшее, но и самое простое решение, для меня, в любом случае, однако другие могут чувствовать и действовать по-другому.

Сначала команда 'cd' сообщает директории местоположения скриптов. Затем '&&', чтобы вы могли связать его после исключения следующей команды. Наконец, откройте ваш скрипт так же, как вы бы выполняли его в терминале! Сохранено в вашем файле BASH и занимает 5 секунд для установки.

Надеюсь, это помогло кому-то.

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

Таким образом, вам не нужно ничего менять, чтобы это работало.

Я не уверен, что это работает так в Linux, если предположить, что это не так, если никто не предложил это. Но вместо того, чтобы использовать.// вернуться к каталогам. Можете ли вы использовать кавычки, чтобы дать ему абсолютный путь? Может быть, это не дает вам доступа ко всему драйву, чтобы даже сделать это, если подумать.

Древний вопрос, но вечный.

Решение, которое я постоянно видел, состоит в том, чтобы иметь каталог $HOME/bin и поместить его первым в $PATH (через

/.bashrc если его там еще нет; в некоторых системах

/bin по умолчанию является первым в $PATH ). Удаление сценариев для выполнения или символических ссылок на сценарии / исполняемые файлы в другом месте - это простой способ решения проблем с путями, которые не должны затрагивать систему или других пользователей.

Если сценарию требуются дополнительные ресурсы, которые можно найти относительно его собственного местоположения (не редкость), тогда используется envvar $BASH_SOURCE . $BASH_SOURCE всегда содержит абсолютный путь к самому запущенному скрипту, независимо от значения $PWD .

Таким образом, мы видим, что $HOME/bin является первым в $PATH , поэтому все, что я вставлю в

/bin будет работать. У меня есть демонстрационный скрипт

Это может быть использовано для получения абсолютного пути к местоположению запущенного скрипта.

Большинство людей устанавливают программы из официального менеджера пакетов, поэтому им не нужно думать о том, куда они идут в Linux. После их установки они просто вводят имя программы, и она работает, как никто другой. Что произойдет, если вы напишите свой собственный исполняемый скрипт оболочки или загрузите программу из Интернета? Что если вы скомпилировали что-то из исходного кода, и оно не будет работать вне определенного каталога? Естественно, вы всегда должны быть уверены, что каждая программа безопасна, прежде чем запускать ее, но есть несколько способов заставить ее работать везде, как только вы это сделаете.

Прежде всего, вам нужно работать в командной строке. Ищите слово Terminal из Ubuntu Dash, если вы используете Unity. Большинство окружений рабочего стола позволят вам открыть терминал, если вы нажмете Ctrl + Alt + T. Пользователи настольных сред, таких как LXDE, Xfce4 и KDE, могут щелкнуть меню «Приложения», выбрать «Системные инструменты», а затем «Терминал». Хотя для работы с программами вам обычно требуется доступ администратора, в большинстве случаев вам вообще не нужно использовать sudo.

Метод 1: Редактирование ваших переменных пути

Предполагая, что вы знаете, где находится программа, и она уже настроена на выполнение, вы можете добавить ее в свой путь. Путь поиска сообщает bash, где искать имя программы, которую вы вводите в командной строке. Если вы когда-либо использовали командные строки Windows или MS-DOS, то вы могли бы запомнить этот трюк. Предположим, у вас есть исполняемый файл в папке загрузок. Если вы хотите иметь возможность выполнять его из любого места, пока ваша сессия остается открытой, введите экспорт PATH = $ PATH:

/ Загрузки и нажмите ввод.

Это изменит путь для вашего текущего сеанса, но когда вы откроете новое окно или закроете текущий, вы вернетесь к пути по умолчанию. Конечно, это идеально подходит для тех случаев, когда вы хотите проводить эксперименты с преформой, но не идеально, если вы пытаетесь добиться чего-то постоянного. Тип нано

/ .bashrc в командной строке, если вы хотите внести изменения навсегда.


Если вы предпочитаете другой редактор, такой как vi или vim, тогда вы можете заменить слово nano в этой команде на имя вашего любимого текстового редактора терминала. Нажмите клавишу Page Down или клавишу курсора со стрелкой вниз, чтобы перейти к нижней части файла, а затем добавьте команду пути. Например, мы добавили строку export PATH = $ PATH: / home / user / Downloads внизу, чтобы сделать это постоянное местоположение.


Это будет анализироваться каждый раз, когда вы открываете новое окно оболочки. Имейте в виду, что ваше имя пользователя скорее всего не пользователь, поэтому вы захотите заменить его. Нажмите Ctrl + O, чтобы сохранить его, если вы используете nano, а затем нажмите Ctrl + X, чтобы выйти. Вы должны сделать, и для большинства пользователей этого более чем достаточно, так как этот метод требует наименьшего количества игры. Есть и другие пути, по которым вы не можете пойти.

Способ 2: создать каталог

/ .local / bin фактически включен в большинство назначений PATH по умолчанию, он обычно не создается во многих популярных реализациях GNU / Linux. Если вы не создали его, потому что вы делали сценарий оболочки или что-то еще, что вы хотели запускать из любого места, то, вероятно, у вас его пока нет. При этом, поскольку он был добавлен по умолчанию, программы сразу же его исчерпают.

В командной строке введите mkdir

Теперь, когда вы перемещаете что-либо в этот каталог, вы можете запускать его из любого места. Предположим, у вас есть сценарий оболочки chkFile в папке «Загрузки», который вы сначала проверили, чтобы убедиться, что он безопасен и не доставит вам никаких проблем. Естественно, это просто выдуманное имя файла, и вы хотите напечатать ls

/ Загрузки или что у вас, чтобы найти настоящее имя. Предполагая, что наш пример был верным, вам нужно набрать chmod + x

/ Загрузки / chkFile чтобы сделать его исполняемым, а затем введите mv

/ .local / bin положить его в правильный каталог. С этого момента вы сможете выполнять его из любого места.

Способ 3: графическое выполнение программ

Хотя многие пользователи Linux предпочитают использовать командную строку, вам не нужно выполнять сценарии таким образом, если вы этого не хотите. У вас есть другие варианты. Нажатие клавиш Super и E в большинстве графических сред рабочего стола откроет файловый браузер, или вы можете искать File Manager в Ubuntu Unity Dash в зависимости от конфигурации, с которой вы работаете. Вам будет представлен вид всех папок в вашем домашнем каталоге, поэтому дважды щелкните по папке, содержащей искомый исполняемый файл. Вы также можете выделить его и нажать клавишу ввода.

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


Этот процесс немного сложнее и должен выполняться только с файлами, в которых вы абсолютно уверены, что они того стоят. Тем не менее, это очень полезный способ запуска сценариев, пока вы их создаете, и это может быть что-то, что упускают из виду те, кто когда-либо работает только с командной строкой на регулярной основе.

Читайте также: