Выполнение сценариев оболочки удара

case использует globs , которые это очень простая система сопоставления с образцом, похожая на регулярные выражения. Некоторые инструменты, такие как find , фактически поддерживают и (в данном случае через -name и -regex ). Но дело обстоит еще сложнее: существуют различные разновидности регулярных выражений . Некоторые инструменты поддерживают один, некоторые - несколько. Вам просто нужно проверить, что указано на странице man или в другой справочной документации (и даже в этом случае это может быть трудно понять) для каждой комбинации инструмента и версии. Список ссылок был бы огромным, и я не думаю, что это был бы очень полезный ответ.

1
14.03.2014, 01:56
3 ответа
[118160]sh[12151] Выполняется программа с именем [118543]hello_world.sh[118544] в пути поиска программы (PATH) [118545]. Если эта программа начинается со строки [118547]shebang[118548], то эта строка указывает на то, что программа должна быть передана интерпретатору для выполнения; в противном случае программа должна быть загружена как родной код. Строка shebang считывается ядром. Например, если первая строка [118549]hello_world.sh[118550] равна [118551]#!/bin/sh[118552], то ядро запускает [118553]/bin/sh[118554] и передает ему [118555]hello_world. sh[118556] в качестве аргумента.[12152] Если [118557]hello_world.sh[118558] не начинается с shebang и не является корректным нативным кодом, то при попытке его выполнения кернел вернет ошибку. Если вы делаете это из оболочки, оболочка заметит ошибку и попытается выполнить [118559]hello_world.sh[118560] как скрипт оболочки (как второй вид ниже).[12153] Это запустит программу под названием [118561]sh[118562], найденную в PATH, с переданным в качестве аргумента [118563]script_name.sh[118564]. Программа [118565]sh[118566], предполагая, что это обычная оболочка, откроет файл под названием [118567]script_name.sh[118568] в текущем каталоге и интерпретирует его. Если скрипт начинается со строки shebang, то он игнорируется. Скрипт не обязательно должен быть исполняемым.[12154]Когда вы выполняете это в оболочке, любая из этих инструкций сообщает запущенной оболочке, что она интерпретирует команды в указанном файле. Скрипт выполняется не как отдельная программа, а как часть существующего процесса оболочки. Таким образом, скрипт может повлиять на текущую директорию, окружение, ... запущенной оболочки. Команды сборки [118569].[118570] и [118571] source[118572] являются синонимами, за исключением того, что [118573].[118574] только ищет [118575] script_name.sh[118576] в PATH, в то время как в некоторых оболочках [118577] source[118578] также ищет в текущем каталоге.[118169].
0
28.01.2020, 01:59
[12136]Он использует интерпретатор из скрипта... Может быть, это sh, но может быть какой-то другой. Также, нужен исполняемый бит. И найдите скрипт из $PATH, если он не находится в текущем каталоге[12137]Запустите новый экзамен программы sh с этой оболочкой[12138]Не используйте его раньше.... Может быть, что-нибудь вроде включения, если да - вы можете использовать текущее состояние оболочки в скрипте (в отличие от первых 2)[118131].
0
28.01.2020, 01:59
[118132] Существуют ситуации, в которых ваша цель - изменить текущее окружение. Это происходит, например, при чтении определений переменных или функций / псевдонимов из конфигурационного файла (например, загрузочные файлы оболочки, такие как [118527]~/.bashrc[118528], [118529]~/.aliases[118530]).[12139]Вызов оболочки со скриптом в качестве аргумента в некоторых ситуациях имеет то преимущество, что вам не нужно делать файл исполняемым и что вы можете легко изменить параметры выполнения:[12140]Это также необходимо при проверке того, как различные оболочки выполняют скрипт:[12141]против:[12141]. [12142]vs.[12143]
0
28.01.2020, 01:59

Теги

Похожие вопросы