bash каталог запуска скрипта

Bash каталог запуска скрипта

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

Можно, конечно, поступить просто и в самом скрипте в переменной жёстко прописать полный путь до каталога, в котором этот скрипт лежит. Получится что-то вроде этого:
Вполне рабочий вариант и две обозначенные выше проблемы будут решены, но если надо будет переместить скрипт в другой каталог, то и значение переменной придётся руками поменять в самом скрипте. Не очень удобно.

13 комментариев:

bash каталог запуска скрипта

А если не воспользовались для запуска символической ссылкой?
Да и к чему городить огород.
Проще так:
DIRSCRIPT=$(pwd) # Текущая директория
echo «$«

bash каталог запуска скрипта

Поправка.. Короче, разобрался. Все это туфта и то и другое.
Вот универсальное отличное решение, особенно, если учитывать, что во фряхе нет «readlink»..

И запускайте скрипт как хотите..

bash каталог запуска скрипта

> А если не воспользовались для запуска символической ссылкой?
Отработает всё совершенно корректно

А вы уверены, что называть туфтой решение в котором вы так и не разобрались хорошая идея?

> во фряхе нет «readlink»
Где я писал что это должно работать во фрибсд? Прочитайте название блога и сообщения.
Я не использую фрибсд, но позволю себе поинтересоваться, а какой интерпретатор команд вы используете в ней? На сколько мне известно, по умолчанию там tcsh или csh, а совсем не bash.

> И запускайте скрипт как хотите
Да что вы? Оукей. Тогда создайте символьную ссылку на свой скрипт в другом каталоге (не в том в котором лежит скрипт), войдите в этот каталог и выполните симлинк. Сильно удивитесь. Ваше решение вернет путь до каталога, в котором находится симлинк, вместо каталога в котором находится сам скрипт. Надеюсь доступно объяснил.

А еще поясните, пожалуйста, чем решение из двух команд, приведенное мной, «огороднее» вашего решения из трёх команд? Кроме того, переход в каталог для того что бы узнать путь до него немножко попахивает костылем, вам так не кажется? Но это я уже придираюсь, конечно, т. к. в баше без костылей никуда.

Источник

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

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

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

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

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

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

#!/bin/bash
echo «Hello world»

bash каталог запуска скрипта

chmod ugo+x script.sh

bash каталог запуска скриптаbash каталог запуска скрипта

bash каталог запуска скрипта

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

bash каталог запуска скрипта

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

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

bash каталог запуска скрипта

bash каталог запуска скрипта

bash каталог запуска скрипта

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

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

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

Выводы

Источник

ИТ База знаний

Полезно

— Онлайн генератор устойчивых паролей

— Онлайн калькулятор подсетей

— Руководство администратора FreePBX на русском языке

— Руководство администратора Cisco UCM/CME на русском языке

— Руководство администратора по Linux/Unix

Навигация

Серверные решения

Телефония

FreePBX и Asterisk

Настройка программных телефонов

Корпоративные сети

Протоколы и стандарты

🔥 Популярное

Руководство по команде grep в Linux

15 примеров команды PING для диагностики сети

Рекурсивно найти слово в файлах и папках Linux

15 примеров CURL в Linux

👌 Похожее

10 команд Linux, которые убьют ваш сервер

Автоматическая смена паролей пользователей Linux

Установка CentOS 7 Minimal

Поиск и расположение команд в Linux

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

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

Онлайн курс по Linux

Мы собрали концентрат самых востребованных знаний, которые позволят тебе начать карьеру администратора Linux, расширить текущие знания и сделать уверенный шаг к DevOps

bash каталог запуска скрипта

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

bash каталог запуска скрипта

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

Подготовка

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

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

bash каталог запуска скрипта

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

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

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

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

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

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

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

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

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

Полезно?

Почему?

😪 Мы тщательно прорабатываем каждый фидбек и отвечаем по итогам анализа. Напишите, пожалуйста, как мы сможем улучшить эту статью.

😍 Полезные IT – статьи от экспертов раз в неделю у вас в почте. Укажите свою дату рождения и мы не забудем поздравить вас.

Источник

Получение исходного каталога скрипта Bash изнутри

Как получить путь к каталогу, в котором Баш сценарий находится, внутри этот скрипт?

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

30 ответов

является полезным однострочным, который даст вам полное имя каталога скрипта независимо от того, откуда он вызывается.

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

чтобы понять, как это работает, попробуйте запустить этот более подробном виде:

и он напечатает что-то вроде:

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

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

readlink разрешит путь скрипта к абсолютному пути от корня файловой системы. Таким образом, любые пути, содержащие одиночные или двойные точки, Тильды и/или символические ссылки, будут разрешены до полного пути.

вот сценарий, демонстрирующий каждый из них, whatdir.sh:

запуск этого скрипта в моем домашнем каталоге, используя относительный путь:

снова, но используя полный путь к скрипту:

теперь изменение каталогов:

и, наконец, используя символическую ссылку, чтобы выполнить скрипт:

работает для всех версий,в том числе

альтернативно, если сценарий bash сам относительная ссылка вы хочу чтобы следовать за ним и вернуть полный путь связанного скрипта:

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

этот комментарий и код Copyleft, выбираемая лицензия под GPL2.0 или более поздней версии или CC-SA 3.0 (CreativeCommons Share Alike) или более поздней версии. c) 2008 год. Все права защищены. Никаких гарантий. Вы были warned.
http://www.gnu.org/licenses/gpl-2.0.txt
http://creativecommons.org/licenses/by-sa/3.0/
18eedfe1c99df68dc94d4a94712a71aaa8e1e9e36cacf421b9463dd2bbaa02906d0d6656

обратите внимание, что вы должны использовать #!/ bin / bash, а не #!/bin / sh с его расширением bash

Это должно сделать это:

работает с символическими ссылками и пробелами в path. Видеть страницах dirname и более ранних версий.

из комментария, похоже, не работает с Mac OS. Понятия не имею почему. Есть предложения?

, dirname дает точно часть каталога имени файла, которая, скорее всего, будет относительно текущего рабочего каталога. Если вашему скрипту по какой-то причине нужно изменить каталог, то вывод из dirname становиться бессмысленным.

Я предлагаю следующее:

таким образом, вы получите абсолютный, а не относительный путь.

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

решает конкретный сценарий в вопросе, я считаю, что абсолютный путь более полезен в целом.

это получает текущий рабочий каталог на Mac OS X 10.6.6:

это специально для Linux, но вы можете использовать:

вот POSIX совместимый однострочный:

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

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

попробуйте этот каталог для размера:

/ var / No one / Thought/About Spaces Being/in a Directory/Name / и вот ваш файл.текст

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

поэтому, чтобы сделать его действительно полезным, вот как перейти в каталог запущенного скрипта:

надеюсь, что это поможет

Я бы использовал что-то вроде этого:

небольшое изменение решения e-satis и 3bcdnlklvc04a указано в ответ

Это должно работать во всех случаях, которые они перечислили.

EDIT: предотвращение popd после неудачного pushd, благодаря konsolebox

вот простой, правильный путь:

и конечно dirname получает родительский каталог путь.

обратите внимание, что это должен быть первый оператор в вашем скрипте.

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

если вы работаете с Linux, кажется, что с помощью proc handle-лучшее решение для поиска полностью разрешенного источника текущего запущенного скрипта (в интерактивном сеансе ссылка указывает на соответствующий /dev/pts/X ):

Источник

Основы BASH. Часть 1

Введение

break выход из цикла for, while или until
continue выполнение следующей итерации цикла for, while или until
echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода
exit выход из оболочки
export отмечает аргументы как переменные для передачи в дочерние процессы в среде
hash запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении
kill посылает сигнал завершения процессу
pwd выводит текущий рабочий каталог
read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.\
return заставляет функцию оболочки выйти с указанным значением
shift перемещает позиционные параметры налево
test вычисляет условное выражение
times выводит имя пользователя и системное время, использованное оболочкой и ее потомками
trap указывает команды, которые должны выполняться при получении оболочкой сигнала
unset вызывает уничтожение переменных оболочки
wait ждет выхода из дочернего процесса и сообщает выходное состояние.

И конечно же кроме встроенных команд мы будем использовать целую кучу внешних, отдельных команд-программ, с которыми мы познакомимся уже в процессе

Что необходимо знать с самого начала

1. Любой bash-скрипт должен начинаться со строки:

#!/bin/bash
в этой строке после #! указывается путь к bash-интерпретатору, поэтому если он у вас установлен в другом месте(где, вы можете узнать набрав whereis bash) поменяйте её на ваш путь.
2. Коментарии начинаются с символа # (кроме первой строки).
3. В bash переменные не имеют типа(о них речь пойдет ниже)

Переменные и параметры скрипта

Приведу как пример небольшой пример, который мы разберем:

Результат выполнения скрипта:

После того как мы познакомились как использовать переменные и передавать скрипту параметры, время познакомиться с зарезервированными переменными:

Условия

Условные операторы, думаю, знакомы практически каждому, кто хоть раз пытался на чем-то писать программы. В bash условия пишутся след. образом (как обычно на примере):
#!/bin/bash
source=$1 #в переменную source засовываем первый параметр скрипта
dest=$2 #в переменную dest засовываем второй параметр скрипта

Условия. Множественный выбор

esac #окончание оператора case.

Результат работы:
ite@ite-desktop:

UPD: Исправил некоторые ошибки
UPD: Обновил часть про условия if-then-else

Источник

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

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